From fb5df5ad3e3206e9e431c73e2aa3d5447761b6ae Mon Sep 17 00:00:00 2001 From: "Maxim.Medvedev" Date: Tue, 21 Feb 2012 20:41:39 +0400 Subject: [PATCH] correct Groovy script run configuration producer --- .../plugins/groovy/runner/GroovyRunnerUtil.java | 17 +++-------------- .../GroovyScriptRunConfigurationProducer.java | 2 +- 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyRunnerUtil.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyRunnerUtil.java index e3cad2c34601..a6c946afe4fc 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyRunnerUtil.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyRunnerUtil.java @@ -20,16 +20,12 @@ import com.intellij.psi.util.PsiMethodUtil; import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.groovy.lang.psi.GroovyFile; import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefinition; -import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrMethod; import org.jetbrains.plugins.groovy.lang.psi.impl.synthetic.GroovyScriptClass; /** * @author Max Medvedev */ public class GroovyRunnerUtil { - - private static final String JAVA_LANG_RUNNABLE = "java.lang.Runnable"; - @Nullable public static PsiClass getRunningClass(PsiElement element) { final PsiFile file = element.getContainingFile(); @@ -46,19 +42,12 @@ public class GroovyRunnerUtil { } public static boolean isRunnable(final PsiClass psiClass) { - if (!(psiClass instanceof GrTypeDefinition)) return false; + if (!(psiClass instanceof GrTypeDefinition) && !(psiClass instanceof GroovyScriptClass)) return false; if (psiClass instanceof PsiAnonymousClass) return false; if (psiClass.isInterface()) return false; - final PsiClass runnable = JavaPsiFacade.getInstance(psiClass.getProject()).findClass(JAVA_LANG_RUNNABLE, psiClass.getResolveScope()); + final PsiClass runnable = JavaPsiFacade.getInstance(psiClass.getProject()).findClass(CommonClassNames.JAVA_LANG_RUNNABLE, psiClass.getResolveScope()); if (runnable == null) return false; - final PsiMethod runMethod = runnable.getMethods()[0]; - final PsiMethod[] runImplementations = psiClass.findMethodsBySignature(runMethod, false); - if (runImplementations.length == 1 && - runImplementations[0] instanceof GrMethod && - ((GrMethod)runImplementations[0]).getBlock() != null) { - return psiClass.getContainingClass() == null || psiClass.hasModifierProperty(PsiModifier.STATIC); - } - return false; + return psiClass.isInheritor(runnable, true); } public static boolean canBeRunByGroovy(final PsiClass psiClass) { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyScriptRunConfigurationProducer.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyScriptRunConfigurationProducer.java index 67c81ff24225..26a0b39922b0 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyScriptRunConfigurationProducer.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyScriptRunConfigurationProducer.java @@ -56,7 +56,7 @@ public class GroovyScriptRunConfigurationProducer extends RuntimeConfigurationPr GroovyFile groovyFile = (GroovyFile)file; final PsiClass aClass = GroovyRunnerUtil.getRunningClass(location.getPsiElement()); - if (aClass != null && GroovyRunnerUtil.canBeRunByGroovy(aClass)) { + if (GroovyRunnerUtil.isRunnable(aClass)) { final RunnerAndConfigurationSettings settings = createConfiguration(aClass); if (settings != null) { mySourceElement = element;