2424import com .intellij .execution .actions .RunConfigurationProducer ;
2525import com .intellij .openapi .module .Module ;
2626import com .intellij .openapi .module .ModuleUtilCore ;
27+ import com .intellij .openapi .project .Project ;
2728import com .intellij .openapi .util .Comparing ;
2829import com .intellij .openapi .util .Ref ;
2930import com .intellij .openapi .util .io .FileUtil ;
3031import com .intellij .openapi .util .text .StringUtil ;
32+ import com .intellij .openapi .vfs .VfsUtilCore ;
33+ import com .intellij .openapi .vfs .VirtualFile ;
3134import com .intellij .psi .PsiDirectory ;
3235import com .intellij .psi .PsiElement ;
3336import com .intellij .psi .PsiFile ;
37+ import com .intellij .psi .PsiManager ;
3438import com .intellij .psi .util .PsiTreeUtil ;
39+ import com .intellij .util .Processor ;
3540import org .jetbrains .annotations .NotNull ;
3641import org .jetbrains .annotations .Nullable ;
3742
@@ -45,32 +50,38 @@ protected GoTestRunConfigurationProducerBase(@NotNull GoTestFramework framework)
4550 }
4651
4752 @ Override
48- protected boolean setupConfigurationFromContext (@ NotNull GoTestRunConfiguration configuration ,
53+ protected boolean setupConfigurationFromContext (@ NotNull final GoTestRunConfiguration configuration ,
4954 ConfigurationContext context ,
5055 Ref sourceElement ) {
51- PsiElement contextElement = GoRunUtil .getContextElement (context );
56+ final PsiElement contextElement = GoRunUtil .getContextElement (context );
5257 if (contextElement == null ) {
5358 return false ;
5459 }
5560
5661 Module module = ModuleUtilCore .findModuleForPsiElement (contextElement );
57- if (module == null || !GoSdkService .getInstance (module .getProject ()).isGoModule (module )) return false ;
62+ final Project project = contextElement .getProject ();
63+ if (module == null || !GoSdkService .getInstance (project ).isGoModule (module )) return false ;
5864 if (!myFramework .isAvailable (module )) return false ;
5965
6066 configuration .setModule (module );
6167 configuration .setTestFramework (myFramework );
6268 if (contextElement instanceof PsiDirectory ) {
63- for (PsiFile file : ((PsiDirectory )contextElement ).getFiles ()) {
64- if (myFramework .isAvailableOnFile (file )) {
65- configuration .setName (getPackageConfigurationName (((PsiDirectory )contextElement ).getName ()));
66- configuration .setKind (GoTestRunConfiguration .Kind .DIRECTORY );
67- String directoryPath = ((PsiDirectory )contextElement ).getVirtualFile ().getPath ();
68- configuration .setDirectoryPath (directoryPath );
69- configuration .setWorkingDirectory (directoryPath );
69+ VirtualFile virtualFile = ((PsiDirectory )contextElement ).getVirtualFile ();
70+ return !VfsUtilCore .processFilesRecursively (virtualFile , new Processor <VirtualFile >() {
71+ @ Override
72+ public boolean process (VirtualFile file ) {
73+ PsiFile psiFile = PsiManager .getInstance (project ).findFile (file );
74+ if (myFramework .isAvailableOnFile (psiFile )) {
75+ configuration .setName (getPackageConfigurationName (((PsiDirectory )contextElement ).getName ()));
76+ configuration .setKind (GoTestRunConfiguration .Kind .DIRECTORY );
77+ String directoryPath = ((PsiDirectory )contextElement ).getVirtualFile ().getPath ();
78+ configuration .setDirectoryPath (directoryPath );
79+ configuration .setWorkingDirectory (directoryPath );
80+ return false ;
81+ }
7082 return true ;
7183 }
72- }
73- return false ;
84+ });
7485 }
7586 else {
7687 PsiFile file = contextElement .getContainingFile ();
0 commit comments