Groovy scripts don't implement Runnable

This commit is contained in:
Maxim.Medvedev
2012-02-22 17:00:04 +04:00
parent d6ec2c5782
commit 3423231426
3 changed files with 12 additions and 15 deletions
@@ -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() {
@@ -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);
}
}
@@ -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;