diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/synthetic/GroovyScriptClass.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/synthetic/GroovyScriptClass.java index 871f1ba3d118..a9e4b4d5db4e 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/synthetic/GroovyScriptClass.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/synthetic/GroovyScriptClass.java @@ -165,7 +165,7 @@ public class GroovyScriptClass extends LightElement implements GrMemberOwner, Sy @NotNull public PsiClassType[] getImplementsListTypes() { - return new PsiClassType[]{ TypesUtil.createTypeByFQClassName(CommonClassNames.JAVA_LANG_RUNNABLE, this)}; + return PsiClassType.EMPTY_ARRAY; } public PsiClass getSuperClass() { 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 a6c946afe4fc..d16af2cb14f5 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyRunnerUtil.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyRunnerUtil.java @@ -42,23 +42,18 @@ public class GroovyRunnerUtil { } public static boolean isRunnable(final PsiClass psiClass) { - 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(CommonClassNames.JAVA_LANG_RUNNABLE, psiClass.getResolveScope()); if (runnable == null) return false; - return psiClass.isInheritor(runnable, true); + + return psiClass instanceof GrTypeDefinition && + !(psiClass instanceof PsiAnonymousClass) && + !psiClass.isInterface() && + psiClass.isInheritor(runnable, true); } public static boolean canBeRunByGroovy(final PsiClass psiClass) { - if (isRunnable(psiClass)) { - return true; - } - - if (PsiMethodUtil.hasMainMethod(psiClass) && (psiClass instanceof GrTypeDefinition || psiClass instanceof GroovyScriptClass)) { - return true; - } - - return false; + return psiClass instanceof GroovyScriptClass || + isRunnable(psiClass) || + psiClass instanceof GrTypeDefinition && PsiMethodUtil.hasMainMethod(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 26a0b39922b0..198df9b8a6dc 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyScriptRunConfigurationProducer.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyScriptRunConfigurationProducer.java @@ -33,6 +33,8 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.groovy.extensions.GroovyScriptTypeDetector; import org.jetbrains.plugins.groovy.lang.psi.GroovyFile; +import org.jetbrains.plugins.groovy.lang.psi.impl.synthetic.GroovyScriptClass; + /** * @author ilyas */ @@ -56,7 +58,7 @@ public class GroovyScriptRunConfigurationProducer extends RuntimeConfigurationPr GroovyFile groovyFile = (GroovyFile)file; final PsiClass aClass = GroovyRunnerUtil.getRunningClass(location.getPsiElement()); - if (GroovyRunnerUtil.isRunnable(aClass)) { + if (aClass instanceof GroovyScriptClass || GroovyRunnerUtil.isRunnable(aClass)) { final RunnerAndConfigurationSettings settings = createConfiguration(aClass); if (settings != null) { mySourceElement = element;