JavaTestFramework: allow to specify several classes paths for the library
authornik <Nikolay.Chashnikov@jetbrains.com>
Wed, 15 Jul 2015 13:53:48 +0000 (16:53 +0300)
committernik <Nikolay.Chashnikov@jetbrains.com>
Wed, 15 Jul 2015 14:13:09 +0000 (17:13 +0300)
java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/OrderEntryFix.java
java/java-impl/src/com/intellij/openapi/projectRoots/ex/JavaSdkUtil.java
java/java-impl/src/com/intellij/testIntegration/JavaTestFramework.java
java/java-impl/src/com/intellij/testIntegration/createTest/CreateTestDialog.java
plugins/junit/src/com/intellij/execution/junit/JUnit4Framework.java

index 4872f946d0b4977aa782be4545dc74571c9d74f2..ffaa21f23010f5f988cab9f9aafb5142b7e564b3 100644 (file)
@@ -46,7 +46,6 @@ import com.intellij.psi.search.PsiShortNamesCache;
 import com.intellij.psi.util.PsiTreeUtil;
 import com.intellij.psi.util.PsiUtil;
 import com.intellij.util.Function;
-import com.intellij.util.PathUtil;
 import com.intellij.util.containers.ContainerUtil;
 import gnu.trove.THashSet;
 import org.jetbrains.annotations.NonNls;
@@ -54,7 +53,10 @@ import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
 import java.io.File;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
 
 /**
  * @author cdr
@@ -126,7 +128,7 @@ public abstract class OrderEntryFix implements IntentionAction, LocalQuickFix {
           List<String> jarPaths;
           String libraryName;
           if (isJunit4) {
-            jarPaths = getJUnit4JarPaths();
+            jarPaths = JavaSdkUtil.getJUnit4JarPaths();
             libraryName = JUNIT4_LIBRARY_NAME;
           }
           else {
@@ -261,23 +263,14 @@ public abstract class OrderEntryFix implements IntentionAction, LocalQuickFix {
     return result;
   }
 
+  /**
+   * @deprecated
+   */
   public static void addJUnit4Library(boolean inTests, Module currentModule) throws ClassNotFoundException {
-    final List<String> junit4Paths = getJUnit4JarPaths();
+    final List<String> junit4Paths = JavaSdkUtil.getJUnit4JarPaths();
     addJarsToRoots(junit4Paths, JUNIT4_LIBRARY_NAME, currentModule, null);
   }
 
-  @NotNull
-  private static List<String> getJUnit4JarPaths() {
-    try {
-      return Arrays.asList(JavaSdkUtil.getJunit4JarPath(),
-                           PathUtil.getJarPathForClass(Class.forName("org.hamcrest.Matcher")),
-                           PathUtil.getJarPathForClass(Class.forName("org.hamcrest.Matchers")));
-    }
-    catch (ClassNotFoundException e) {
-      throw new RuntimeException(e);
-    }
-  }
-
   private static List<PsiClass> filterAllowedDependencies(PsiElement element, PsiClass[] classes) {
     DependencyValidationManager dependencyValidationManager = DependencyValidationManager.getInstance(element.getProject());
     PsiFile fromFile = element.getContainingFile();
index 32d61a83f8b68cea52c8b45a86395997531d91ea..297a8282eca652b04ad78724bc94b98c01708d55 100644 (file)
@@ -19,6 +19,10 @@ import com.intellij.rt.compiler.JavacRunner;
 import com.intellij.util.PathUtil;
 import com.intellij.util.PathsList;
 import org.jetbrains.annotations.NonNls;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Arrays;
+import java.util.List;
 
 public class JavaSdkUtil {
   @NonNls public static final String IDEA_PREPEND_RTJAR = "idea.prepend.rtjar";
@@ -55,4 +59,16 @@ public class JavaSdkUtil {
   public static String getIdeaRtJarPath() {
     return PathUtil.getJarPathForClass(JavacRunner.class);
   }
+
+  @NotNull
+  public static List<String> getJUnit4JarPaths() {
+    try {
+      return Arrays.asList(getJunit4JarPath(),
+                           PathUtil.getJarPathForClass(Class.forName("org.hamcrest.Matcher")),
+                           PathUtil.getJarPathForClass(Class.forName("org.hamcrest.Matchers")));
+    }
+    catch (ClassNotFoundException e) {
+      throw new RuntimeException(e);
+    }
+  }
 }
index ce2f7788f38dcb98557ece821e1f979915d060c0..189f91985ab946554dbc9d6372732929618183ad 100644 (file)
@@ -31,6 +31,9 @@ import com.intellij.util.IncorrectOperationException;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
+import java.util.Collections;
+import java.util.List;
+
 public abstract class JavaTestFramework implements TestFramework {
   public boolean isLibraryAttached(@NotNull Module module) {
     GlobalSearchScope scope = GlobalSearchScope.moduleWithDependenciesAndLibrariesScope(module);
@@ -38,6 +41,12 @@ public abstract class JavaTestFramework implements TestFramework {
     return c != null;
   }
 
+  @NotNull
+  public List<String> getLibraryPaths() {
+    //todo[nik] pull up to the interface and removed 'getLibraryPath()' method
+    return Collections.singletonList(getLibraryPath());
+  }
+
   protected abstract String getMarkerClassFQName();
 
   public boolean isTestClass(@NotNull PsiElement clazz) {
@@ -122,7 +131,8 @@ public abstract class JavaTestFramework implements TestFramework {
   }
   
   public void setupLibrary(Module module) {
-    OrderEntryFix.addJarToRoots(getLibraryPath(), module, null);
+    List<String> paths = getLibraryPaths();
+    OrderEntryFix.addJarsToRoots(paths, paths.size() == 1 ? null : getName(), module, null);
   }
 
   public boolean isSingleConfig() {
index d23abdcc7a5c451fd2ba003a5a22cc3fc1d8c846..7f8ad6acc3b48382d683f94c075a078c24894272 100644 (file)
@@ -140,7 +140,8 @@ public class CreateTestDialog extends DialogWrapper {
       String text = CodeInsightBundle.message("intention.create.test.dialog.library.not.found", descriptor.getName());
       myFixLibraryLabel.setText(text);
 
-      myFixLibraryButton.setVisible(descriptor.getLibraryPath() != null);
+      myFixLibraryButton.setVisible(descriptor instanceof JavaTestFramework ? !((JavaTestFramework)descriptor).getLibraryPaths().isEmpty()
+                                                                            : descriptor.getLibraryPath() != null);
     }
 
     String superClass = descriptor.getDefaultSuperClass();
index 2b4ff0c4bd8420aeca30a8e626607d9272b97567..6bb31092f4742aaa9c89816b3bb3cf577961b160 100644 (file)
@@ -17,13 +17,11 @@ package com.intellij.execution.junit;
 
 import com.intellij.CommonBundle;
 import com.intellij.codeInsight.AnnotationUtil;
-import com.intellij.codeInsight.daemon.impl.quickfix.OrderEntryFix;
 import com.intellij.codeInsight.intention.AddAnnotationFix;
 import com.intellij.icons.AllIcons;
 import com.intellij.ide.fileTemplates.FileTemplateDescriptor;
 import com.intellij.openapi.application.ApplicationManager;
 import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.module.Module;
 import com.intellij.openapi.projectRoots.ex.JavaSdkUtil;
 import com.intellij.openapi.ui.Messages;
 import com.intellij.psi.*;
@@ -35,6 +33,7 @@ import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
 import javax.swing.*;
+import java.util.List;
 
 public class JUnit4Framework extends JavaTestFramework {
   private static final Logger LOG = Logger.getInstance("#" + JUnit4Framework.class.getName());
@@ -56,7 +55,13 @@ public class JUnit4Framework extends JavaTestFramework {
 
   @NotNull
   public String getLibraryPath() {
-    return JavaSdkUtil.getJunit4JarPath();
+    return getLibraryPaths().get(0);
+  }
+
+  @NotNull
+  @Override
+  public List<String> getLibraryPaths() {
+    return JavaSdkUtil.getJUnit4JarPaths();
   }
 
   @Nullable
@@ -158,16 +163,6 @@ public class JUnit4Framework extends JavaTestFramework {
     return new FileTemplateDescriptor("JUnit4 Test Class.java");
   }
 
-  @Override
-  public void setupLibrary(Module module) {
-    try {
-      OrderEntryFix.addJUnit4Library(false, module);
-    }
-    catch (ClassNotFoundException e) {
-      LOG.info(e);
-    }
-  }
-
   @Override
   public boolean isParameterized(PsiClass clazz) {
     final PsiAnnotation annotation = AnnotationUtil.findAnnotation(clazz, JUnitUtil.RUN_WITH);