From 4e081bc2046f278858f287a654e36af51c0303b8 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Fri, 14 Mar 2014 21:34:24 +0100 Subject: [PATCH] prefer tests over main on test methods (DEA-121541) --- .../application/ApplicationConfigurationProducer.java | 9 ++++++++- .../src/com/intellij/codeInsight/TestFrameworks.java | 2 ++ .../src/com/intellij/codeInsight/TestFrameworksImpl.java | 9 +++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) 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