diff --git a/java/execution/impl/src/com/intellij/execution/application/ApplicationConfigurationProducer.java b/java/execution/impl/src/com/intellij/execution/application/ApplicationConfigurationProducer.java index 792c056a5154..a61a952abc01 100644 --- a/java/execution/impl/src/com/intellij/execution/application/ApplicationConfigurationProducer.java +++ b/java/execution/impl/src/com/intellij/execution/application/ApplicationConfigurationProducer.java @@ -15,6 +15,7 @@ */ package com.intellij.execution.application; +import com.intellij.codeInsight.TestFrameworks; import com.intellij.execution.JavaExecutionUtil; import com.intellij.execution.Location; import com.intellij.execution.actions.ConfigurationContext; @@ -82,8 +83,14 @@ public class ApplicationConfigurationProducer extends JavaRunConfigurationProduc @Override public boolean isConfigurationFromContext(ApplicationConfiguration appConfiguration, ConfigurationContext context) { - final PsiClass aClass = ApplicationConfigurationType.getMainClass(context.getPsiLocation()); + final PsiElement location = context.getPsiLocation(); + final PsiClass aClass = ApplicationConfigurationType.getMainClass(location); if (aClass != null && Comparing.equal(JavaExecutionUtil.getRuntimeQualifiedName(aClass), appConfiguration.MAIN_CLASS_NAME)) { + final PsiMethod method = PsiTreeUtil.getParentOfType(location, PsiMethod.class, false); + if (method != null && TestFrameworks.getInstance().isTestMethod(method)) { + return false; + } + final Module configurationModule = appConfiguration.getConfigurationModule().getModule(); if (Comparing.equal(context.getModule(), configurationModule)) return true; diff --git a/java/java-psi-api/src/com/intellij/codeInsight/TestFrameworks.java b/java/java-psi-api/src/com/intellij/codeInsight/TestFrameworks.java index 248aad72fb51..f5835193a41d 100644 --- a/java/java-psi-api/src/com/intellij/codeInsight/TestFrameworks.java +++ b/java/java-psi-api/src/com/intellij/codeInsight/TestFrameworks.java @@ -40,6 +40,8 @@ public abstract class TestFrameworks { public abstract PsiMethod findTearDownMethod(PsiClass psiClass); protected abstract boolean hasConfigMethods(PsiClass psiClass); + + public abstract boolean isTestMethod(PsiMethod method); public boolean isTestOrConfig(PsiClass psiClass) { return isTestClass(psiClass) || hasConfigMethods(psiClass); diff --git a/java/java-psi-impl/src/com/intellij/codeInsight/TestFrameworksImpl.java b/java/java-psi-impl/src/com/intellij/codeInsight/TestFrameworksImpl.java index 7671eae0c97a..ee24b932bf00 100644 --- a/java/java-psi-impl/src/com/intellij/codeInsight/TestFrameworksImpl.java +++ b/java/java-psi-impl/src/com/intellij/codeInsight/TestFrameworksImpl.java @@ -100,4 +100,13 @@ public class TestFrameworksImpl extends TestFrameworks { } return false; } + + @Override + public boolean isTestMethod(PsiMethod method) { + final TestFramework[] testFrameworks = Extensions.getExtensions(TestFramework.EXTENSION_NAME); + for (TestFramework framework : testFrameworks) { + if (framework.isTestMethod(method)) return true; + } + return false; + } } \ No newline at end of file