don't offer to create tests in generated folders
authorMichal Bendowski <bendowski@google.com>
Thu, 20 Aug 2015 17:01:32 +0000 (20:01 +0300)
committernik <Nikolay.Chashnikov@jetbrains.com>
Fri, 21 Aug 2015 07:18:20 +0000 (10:18 +0300)
java/java-impl/src/com/intellij/testIntegration/createTest/CreateTestAction.java

index 92364e134f797b40c12d925c4c0b069decb2f59a..d1e779bde8cc449b8a065784e9fe2ea7be389426 100644 (file)
@@ -25,7 +25,10 @@ import com.intellij.openapi.module.Module;
 import com.intellij.openapi.module.ModuleUtilCore;
 import com.intellij.openapi.project.DumbService;
 import com.intellij.openapi.project.Project;
+import com.intellij.openapi.roots.ContentEntry;
+import com.intellij.openapi.roots.JavaProjectRootsUtil;
 import com.intellij.openapi.roots.ModuleRootManager;
+import com.intellij.openapi.roots.SourceFolder;
 import com.intellij.openapi.ui.Messages;
 import com.intellij.openapi.vfs.VirtualFile;
 import com.intellij.psi.*;
@@ -37,22 +40,26 @@ import org.jetbrains.annotations.Nullable;
 import org.jetbrains.jps.model.java.JavaSourceRootType;
 
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 
 public class CreateTestAction extends PsiElementBaseIntentionAction {
 
   private static final String CREATE_TEST_IN_THE_SAME_ROOT = "create.test.in.the.same.root";
 
+  @Override
   @NotNull
   public String getText() {
     return CodeInsightBundle.message("intention.create.test");
   }
 
+  @Override
   @NotNull
   public String getFamilyName() {
     return getText();
   }
 
+  @Override
   public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiElement element) {
     if (!isAvailableForElement(element)) return false;
 
@@ -135,7 +142,12 @@ public class CreateTestAction extends PsiElementBaseIntentionAction {
   }
 
   protected static void checkForTestRoots(Module srcModule, Set<VirtualFile> testFolders) {
-    testFolders.addAll(ModuleRootManager.getInstance(srcModule).getSourceRoots(JavaSourceRootType.TEST_SOURCE));
+    List<VirtualFile> sourceRoots = ModuleRootManager.getInstance(srcModule).getSourceRoots(JavaSourceRootType.TEST_SOURCE);
+    for (VirtualFile sourceRoot : sourceRoots) {
+      if (!JavaProjectRootsUtil.isInGeneratedCode(sourceRoot, srcModule.getProject())) {
+        testFolders.add(sourceRoot);
+      }
+    }
     //create test in the same module
     if (!testFolders.isEmpty()) return;
 
@@ -162,7 +174,8 @@ public class CreateTestAction extends PsiElementBaseIntentionAction {
     return psiClass;
   }
 
+  @Override
   public boolean startInWriteAction() {
     return false;
   }
-}
\ No newline at end of file
+}