From e2bb7b8eb1fc2b010b7690afa9aa7916fce5e018 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Wed, 1 Apr 2015 13:43:27 +0200 Subject: [PATCH] testng U junit: delegation -> inheritance --- .../PatternConfigurationDelegate.java | 10 ++-- .../actions/RunConfigurationProducer.java | 6 ++- .../TestClassGradleConfigurationProducer.java | 4 +- ...TestMethodGradleConfigurationProducer.java | 4 +- .../junit/AddToTestsPatternAction.java | 6 ++- .../execution/junit/JUnitConfiguration.java | 4 +- .../junit/JUnitConfigurationProducer.java | 3 +- .../junit/PatternConfigurationProducer.java | 48 +++++++++---------- .../junit/TestClassConfigurationProducer.java | 3 +- .../TestMethodConfigurationProducer.java | 3 +- .../configuration/TestNGConfiguration.java | 4 +- .../TestNGConfigurationProducer.java | 2 +- .../TestNGInClassConfigurationProducer.java | 3 +- .../TestNGPatternConfigurationProducer.java | 43 +++++------------ 14 files changed, 70 insertions(+), 73 deletions(-) diff --git a/java/execution/impl/src/com/intellij/execution/PatternConfigurationDelegate.java b/java/execution/impl/src/com/intellij/execution/PatternConfigurationDelegate.java index 93fa04731852..e0a3914b9537 100644 --- a/java/execution/impl/src/com/intellij/execution/PatternConfigurationDelegate.java +++ b/java/execution/impl/src/com/intellij/execution/PatternConfigurationDelegate.java @@ -15,10 +15,10 @@ */ package com.intellij.execution; -import com.intellij.execution.JavaExecutionUtil; -import com.intellij.execution.Location; import com.intellij.execution.actions.ConfigurationContext; +import com.intellij.execution.configurations.ConfigurationType; import com.intellij.execution.configurations.ModuleBasedConfiguration; +import com.intellij.execution.junit.JavaRunConfigurationProducerBase; import com.intellij.execution.junit2.info.MethodLocation; import com.intellij.execution.testframework.TestsUIUtil; import com.intellij.openapi.actionSystem.CommonDataKeys; @@ -35,10 +35,14 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Set; -public abstract class PatternConfigurationDelegate { +public abstract class PatternConfigurationDelegate extends JavaRunConfigurationProducerBase implements Cloneable{ protected abstract boolean isTestClass(PsiClass psiClass); protected abstract boolean isTestMethod(boolean checkAbstract, PsiElement psiElement); + public PatternConfigurationDelegate(ConfigurationType configurationType) { + super(configurationType); + } + public Module findModule(ModuleBasedConfiguration configuration, Module contextModule, Set patterns) { return JavaExecutionUtil.findModule(contextModule, patterns, configuration.getProject(), new Condition() { @Override diff --git a/platform/lang-api/src/com/intellij/execution/actions/RunConfigurationProducer.java b/platform/lang-api/src/com/intellij/execution/actions/RunConfigurationProducer.java index adfc58956d2a..fb3ab0f3355f 100644 --- a/platform/lang-api/src/com/intellij/execution/actions/RunConfigurationProducer.java +++ b/platform/lang-api/src/com/intellij/execution/actions/RunConfigurationProducer.java @@ -190,12 +190,14 @@ public abstract class RunConfigurationProducer { return RunManager.getInstance(context.getProject()).createRunConfiguration("", myConfigurationFactory); } - public static RunConfigurationProducer getInstance(Class aClass) { + @NotNull + public static T getInstance(Class aClass) { for (RunConfigurationProducer producer : Extensions.getExtensions(EP_NAME)) { if (aClass.isInstance(producer)) { - return producer; + return (T)producer; } } + assert false : aClass; return null; } } diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/test/runner/TestClassGradleConfigurationProducer.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/test/runner/TestClassGradleConfigurationProducer.java index 7948c51fff09..11e0280b00e2 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/test/runner/TestClassGradleConfigurationProducer.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/test/runner/TestClassGradleConfigurationProducer.java @@ -64,7 +64,7 @@ public class TestClassGradleConfigurationProducer extends GradleTestRunConfigura final Location location = JavaExecutionUtil.stepIntoSingleClass(contextLocation); if (location == null) return false; - if (PatternConfigurationProducer.isMultipleElementsSelected(context)) { + if (RunConfigurationProducer.getInstance(PatternConfigurationProducer.class).isMultipleElementsSelected(context)) { return false; } PsiClass testClass = JUnitUtil.getTestClass(location); @@ -99,7 +99,7 @@ public class TestClassGradleConfigurationProducer extends GradleTestRunConfigura final Location location = JavaExecutionUtil.stepIntoSingleClass(contextLocation); if (location == null) return false; - if (PatternConfigurationProducer.isMultipleElementsSelected(context)) { + if (RunConfigurationProducer.getInstance(PatternConfigurationProducer.class).isMultipleElementsSelected(context)) { return false; } diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/test/runner/TestMethodGradleConfigurationProducer.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/test/runner/TestMethodGradleConfigurationProducer.java index 0cc88eb2b8a3..d6a83f2a4df0 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/test/runner/TestMethodGradleConfigurationProducer.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/test/runner/TestMethodGradleConfigurationProducer.java @@ -55,7 +55,7 @@ public class TestMethodGradleConfigurationProducer extends GradleTestRunConfigur protected boolean setupConfigurationFromContext(ExternalSystemRunConfiguration configuration, ConfigurationContext context, Ref sourceElement) { - if (PatternConfigurationProducer.isMultipleElementsSelected(context)) { + if (RunConfigurationProducer.getInstance(PatternConfigurationProducer.class).isMultipleElementsSelected(context)) { return false; } final Location contextLocation = context.getLocation(); @@ -82,7 +82,7 @@ public class TestMethodGradleConfigurationProducer extends GradleTestRunConfigur if (configuration == null) return false; if (!GradleConstants.SYSTEM_ID.equals(configuration.getSettings().getExternalSystemId())) return false; - if (PatternConfigurationProducer.isMultipleElementsSelected(context)) { + if (RunConfigurationProducer.getInstance(PatternConfigurationProducer.class).isMultipleElementsSelected(context)) { return false; } diff --git a/plugins/junit/src/com/intellij/execution/junit/AddToTestsPatternAction.java b/plugins/junit/src/com/intellij/execution/junit/AddToTestsPatternAction.java index a49c027ed63a..fafabb696e22 100644 --- a/plugins/junit/src/com/intellij/execution/junit/AddToTestsPatternAction.java +++ b/plugins/junit/src/com/intellij/execution/junit/AddToTestsPatternAction.java @@ -22,6 +22,7 @@ package com.intellij.execution.junit; import com.intellij.execution.PatternConfigurationDelegate; import com.intellij.execution.RunManager; +import com.intellij.execution.actions.RunConfigurationProducer; import com.intellij.execution.configurations.RunConfiguration; import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.project.Project; @@ -41,7 +42,8 @@ public class AddToTestsPatternAction extends AnAction { public void actionPerformed(AnActionEvent e) { final DataContext dataContext = e.getDataContext(); final PsiElement[] psiElements = LangDataKeys.PSI_ELEMENT_ARRAY.getData(dataContext); - final Set classes = PatternConfigurationProducer.collectTestMembers(psiElements, true); + final Set classes = RunConfigurationProducer.getInstance(PatternConfigurationProducer.class).collectTestMembers(psiElements, + true); final Project project = CommonDataKeys.PROJECT.getData(dataContext); final List patternConfigurations = collectPatternConfigurations(classes, project); @@ -81,7 +83,7 @@ public class AddToTestsPatternAction extends AnAction { final DataContext dataContext = e.getDataContext(); final PsiElement[] psiElements = LangDataKeys.PSI_ELEMENT_ARRAY.getData(dataContext); if (psiElements != null) { - final Set foundMembers = PatternConfigurationProducer.collectTestMembers(psiElements, true); + final Set foundMembers = RunConfigurationProducer.getInstance(PatternConfigurationProducer.class).collectTestMembers(psiElements, true); if (foundMembers.isEmpty()) return; final Project project = CommonDataKeys.PROJECT.getData(dataContext); if (project != null) { diff --git a/plugins/junit/src/com/intellij/execution/junit/JUnitConfiguration.java b/plugins/junit/src/com/intellij/execution/junit/JUnitConfiguration.java index c318736e28fb..33eebfdd0a16 100644 --- a/plugins/junit/src/com/intellij/execution/junit/JUnitConfiguration.java +++ b/plugins/junit/src/com/intellij/execution/junit/JUnitConfiguration.java @@ -18,6 +18,7 @@ package com.intellij.execution.junit; import com.intellij.diagnostic.logging.LogConfigurationPanel; import com.intellij.execution.*; +import com.intellij.execution.actions.RunConfigurationProducer; import com.intellij.execution.configuration.EnvironmentVariablesComponent; import com.intellij.execution.configurations.*; import com.intellij.execution.executors.DefaultRunExecutor; @@ -441,7 +442,8 @@ public class JUnitConfiguration extends ModuleBasedConfiguration { + protected PatternConfigurationProducer() { + super(JUnitConfigurationType.getInstance()); + } - @Override - protected boolean isTestMethod(boolean checkAbstract, PsiElement psiElement) { - return JUnitUtil.getTestMethod(psiElement, checkAbstract) != null; - } - }; + @Override + protected boolean isTestClass(PsiClass psiClass) { + return JUnitUtil.isTestClass(psiClass); + } + + @Override + protected boolean isTestMethod(boolean checkAbstract, PsiElement psiElement) { + return JUnitUtil.getTestMethod(psiElement, checkAbstract) != null; + } + + @Override + public boolean isPreferredConfiguration(ConfigurationFromContext self, ConfigurationFromContext other) { + return !other.isProducedBy(TestMethodConfigurationProducer.class); + } @Override protected boolean setupConfigurationFromContext(JUnitConfiguration configuration, ConfigurationContext context, Ref sourceElement) { final LinkedHashSet classes = new LinkedHashSet(); - final PsiElement element = ourDelegate.checkPatterns(context, classes); + final PsiElement element = checkPatterns(context, classes); if (element == null) { return false; } @@ -68,20 +78,8 @@ public class PatternConfigurationProducer extends JUnitConfigurationProducer { final TestObject testobject = unitConfiguration.getTestObject(); if (testobject instanceof TestsPattern) { final Set patterns = unitConfiguration.getPersistentData().getPatterns(); - if (ourDelegate.isConfiguredFromContext(context, patterns)) return true; + if (isConfiguredFromContext(context, patterns)) return true; } return false; } - - public static Module findModule(ModuleBasedConfiguration configuration, Module contextModule, Set patterns) { - return ourDelegate.findModule(configuration, contextModule, patterns); - } - - public static boolean isMultipleElementsSelected(ConfigurationContext context) { - return ourDelegate.isMultipleElementsSelected(context); - } - - public static Set collectTestMembers(PsiElement[] elements, boolean checkAbstract) { - return ourDelegate.collectTestMembers(elements, checkAbstract); - } } diff --git a/plugins/junit/src/com/intellij/execution/junit/TestClassConfigurationProducer.java b/plugins/junit/src/com/intellij/execution/junit/TestClassConfigurationProducer.java index 89d3162b7649..e33e64701247 100644 --- a/plugins/junit/src/com/intellij/execution/junit/TestClassConfigurationProducer.java +++ b/plugins/junit/src/com/intellij/execution/junit/TestClassConfigurationProducer.java @@ -20,6 +20,7 @@ import com.intellij.execution.JavaExecutionUtil; import com.intellij.execution.Location; import com.intellij.execution.actions.ConfigurationContext; import com.intellij.execution.actions.ConfigurationFromContext; +import com.intellij.execution.actions.RunConfigurationProducer; import com.intellij.execution.junit2.PsiMemberParameterizedLocation; import com.intellij.openapi.module.Module; import com.intellij.openapi.util.Ref; @@ -46,7 +47,7 @@ public class TestClassConfigurationProducer extends JUnitConfigurationProducer { } } - if (PatternConfigurationProducer.isMultipleElementsSelected(context)) { + if (RunConfigurationProducer.getInstance(PatternConfigurationProducer.class).isMultipleElementsSelected(context)) { return false; } PsiClass testClass = JUnitUtil.getTestClass(location); diff --git a/plugins/junit/src/com/intellij/execution/junit/TestMethodConfigurationProducer.java b/plugins/junit/src/com/intellij/execution/junit/TestMethodConfigurationProducer.java index 97004ef6cbfa..141818654c4f 100644 --- a/plugins/junit/src/com/intellij/execution/junit/TestMethodConfigurationProducer.java +++ b/plugins/junit/src/com/intellij/execution/junit/TestMethodConfigurationProducer.java @@ -21,6 +21,7 @@ import com.intellij.execution.Location; import com.intellij.execution.PsiLocation; import com.intellij.execution.actions.ConfigurationContext; import com.intellij.execution.actions.ConfigurationFromContext; +import com.intellij.execution.actions.RunConfigurationProducer; import com.intellij.execution.junit2.PsiMemberParameterizedLocation; import com.intellij.execution.junit2.info.MethodLocation; import com.intellij.openapi.module.Module; @@ -38,7 +39,7 @@ public class TestMethodConfigurationProducer extends JUnitConfigurationProducer protected boolean setupConfigurationFromContext(JUnitConfiguration configuration, ConfigurationContext context, Ref sourceElement) { - if (PatternConfigurationProducer.isMultipleElementsSelected(context)) { + if (RunConfigurationProducer.getInstance(PatternConfigurationProducer.class).isMultipleElementsSelected(context)) { return false; } final Location contextLocation = context.getLocation(); diff --git a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfiguration.java b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfiguration.java index bcbc113ef3dd..e051d95331e8 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfiguration.java +++ b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfiguration.java @@ -24,6 +24,7 @@ package com.theoryinpractice.testng.configuration; import com.intellij.diagnostic.logging.LogConfigurationPanel; import com.intellij.execution.*; +import com.intellij.execution.actions.RunConfigurationProducer; import com.intellij.execution.configuration.EnvironmentVariablesComponent; import com.intellij.execution.configurations.*; import com.intellij.execution.junit.RefactoringListeners; @@ -275,7 +276,8 @@ public class TestNGConfiguration extends ModuleBasedConfiguration sourceElement) { - if (TestNGPatternConfigurationProducer.isMultipleElementsSelected(context)) { + if (RunConfigurationProducer.getInstance(TestNGPatternConfigurationProducer.class).isMultipleElementsSelected(context)) { return false; } diff --git a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGPatternConfigurationProducer.java b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGPatternConfigurationProducer.java index c88019bb8ac2..a0e710ad04bb 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGPatternConfigurationProducer.java +++ b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGPatternConfigurationProducer.java @@ -20,35 +20,27 @@ */ package com.theoryinpractice.testng.configuration; -import com.intellij.execution.JavaExecutionUtil; -import com.intellij.execution.Location; import com.intellij.execution.PatternConfigurationDelegate; import com.intellij.execution.actions.ConfigurationContext; -import com.intellij.execution.configurations.ModuleBasedConfiguration; -import com.intellij.execution.junit.JUnitUtil; -import com.intellij.execution.junit2.info.MethodLocation; -import com.intellij.execution.testframework.AbstractTestProxy; -import com.intellij.execution.testframework.TestsUIUtil; -import com.intellij.openapi.actionSystem.CommonDataKeys; -import com.intellij.openapi.actionSystem.DataContext; -import com.intellij.openapi.actionSystem.LangDataKeys; import com.intellij.openapi.module.Module; import com.intellij.openapi.util.Comparing; -import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.Ref; -import com.intellij.psi.*; +import com.intellij.psi.PsiClass; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiModifierListOwner; import com.theoryinpractice.testng.model.TestData; import com.theoryinpractice.testng.model.TestType; import com.theoryinpractice.testng.util.TestNGUtil; -import java.util.ArrayList; import java.util.LinkedHashSet; -import java.util.List; import java.util.Set; -public class TestNGPatternConfigurationProducer extends TestNGConfigurationProducer{ - private static PatternConfigurationDelegate ourDelegate = new PatternConfigurationDelegate() { - @Override +public class TestNGPatternConfigurationProducer extends PatternConfigurationDelegate { + public TestNGPatternConfigurationProducer() { + super(TestNGConfigurationType.getInstance()); + } + + @Override protected boolean isTestClass(PsiClass psiClass) { return TestNGUtil.hasTest(psiClass); } @@ -57,14 +49,13 @@ public class TestNGPatternConfigurationProducer extends TestNGConfigurationProdu protected boolean isTestMethod(boolean checkAbstract, PsiElement psiElement) { return psiElement instanceof PsiModifierListOwner && TestNGUtil.hasTest((PsiModifierListOwner)psiElement); } - }; - + @Override protected boolean setupConfigurationFromContext(TestNGConfiguration configuration, ConfigurationContext context, Ref sourceElement) { final LinkedHashSet classes = new LinkedHashSet(); - final PsiElement element = ourDelegate.checkPatterns(context, classes); + final PsiElement element = checkPatterns(context, classes); if (element == null) { return false; } @@ -77,25 +68,17 @@ public class TestNGPatternConfigurationProducer extends TestNGConfigurationProdu return true; } - public static boolean isMultipleElementsSelected(ConfigurationContext context) { - return ourDelegate.isMultipleElementsSelected(context); - } - - public static Module findModule(ModuleBasedConfiguration configuration, Module contextModule, Set patterns) { - return ourDelegate.findModule(configuration, contextModule, patterns); - } - @Override protected Module findModule(TestNGConfiguration configuration, Module contextModule) { final Set patterns = configuration.data.getPatterns(); - return ourDelegate.findModule(configuration, contextModule, patterns); + return findModule(configuration, contextModule, patterns); } @Override public boolean isConfigurationFromContext(TestNGConfiguration testNGConfiguration, ConfigurationContext context) { final String type = testNGConfiguration.getPersistantData().TEST_OBJECT; if (Comparing.equal(type, TestType.PATTERN.getType())) { - return ourDelegate.isConfiguredFromContext(context, testNGConfiguration.getPersistantData().getPatterns()); + return isConfiguredFromContext(context, testNGConfiguration.getPersistantData().getPatterns()); } return false; }