Test creators: allow to use several creators per language and customize the 'CreateTe...
authorAlexander Zolotov <goldifit@gmail.com>
Wed, 9 Aug 2017 18:49:51 +0000 (21:49 +0300)
committerAlexander Zolotov <goldifit@gmail.com>
Wed, 9 Aug 2017 19:03:35 +0000 (22:03 +0300)
platform/lang-api/src/com/intellij/testIntegration/TestCreator.java
platform/lang-impl/src/com/intellij/testIntegration/GotoTestOrCodeHandler.java

index 8cb85c1ed3aa35a5d7829ebc2fde7e0ee75ea1e9..bf90a3dfbaa328e38399c766c725cec3c5f95ddc 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2017 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
 
 package com.intellij.testIntegration;
 
+import com.intellij.navigation.ItemPresentation;
 import com.intellij.openapi.editor.Editor;
 import com.intellij.openapi.project.Project;
 import com.intellij.psi.PsiFile;
 
+/**
+ * Implementation of the extension are used on generating tests while navigation using GotoTestOrCodeAction
+ * <p>
+ * To decorate creating test action consider implementing {@link ItemPresentation}
+ */
 public interface TestCreator {
   boolean isAvailable(Project project, Editor editor, PsiFile file);
+
   void createTest(Project project, Editor editor, PsiFile file);
 }
index ce59f4761a9b598392f06177dfe06e95e2b37260..664df489b04cecb5e6665f041a32837552bb4353 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2014 JetBrains s.r.o.
+ * Copyright 2000-2017 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,6 +21,7 @@ import com.intellij.codeInsight.navigation.GotoTargetHandler;
 import com.intellij.codeInsight.navigation.NavigationUtil;
 import com.intellij.execution.executors.DefaultRunExecutor;
 import com.intellij.icons.AllIcons;
+import com.intellij.navigation.ItemPresentation;
 import com.intellij.openapi.actionSystem.Shortcut;
 import com.intellij.openapi.editor.Editor;
 import com.intellij.openapi.keymap.Keymap;
@@ -31,6 +32,7 @@ import com.intellij.pom.Navigatable;
 import com.intellij.psi.PsiElement;
 import com.intellij.psi.PsiFile;
 import com.intellij.psi.util.PsiUtilCore;
+import com.intellij.util.ObjectUtils;
 import com.intellij.util.SmartList;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
@@ -60,18 +62,20 @@ public class GotoTestOrCodeHandler extends GotoTargetHandler {
     }
     else {
       candidates = TestFinderHelper.findTestsForClass(selectedElement);
-      final TestCreator creator = LanguageTestCreators.INSTANCE.forLanguage(file.getLanguage());
-      if (creator != null && creator.isAvailable(file.getProject(), editor, file)) {
+      for (TestCreator creator : LanguageTestCreators.INSTANCE.allForLanguage(file.getLanguage())) {
+        if (!creator.isAvailable(file.getProject(), editor, file)) continue;
         actions.add(new AdditionalAction() {
           @NotNull
           @Override
           public String getText() {
-            return "Create New Test...";
+            String text = creator instanceof ItemPresentation ? ((ItemPresentation)creator).getPresentableText() : null;
+            return ObjectUtils.notNull(text, "Create New Test...");
           }
 
           @Override
           public Icon getIcon() {
-            return AllIcons.Actions.IntentionBulb;
+            Icon icon = creator instanceof ItemPresentation ? ((ItemPresentation)creator).getIcon(false) : null;
+            return ObjectUtils.notNull(icon, AllIcons.Actions.IntentionBulb);
           }
 
           @Override