LIGHT_CLASSES mode for scripts

- Do not generate constructor bodies
- Do not generate script class when package contents are requested
- NOT DONE: generate script class when its name is requested
This commit is contained in:
Andrey Breslav
2014-12-25 20:01:08 +03:00
parent 95f5e8d08c
commit 89e1588e13
8 changed files with 108 additions and 59 deletions
@@ -51,6 +51,7 @@ import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.psi.JetClassOrObject;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.psi.JetPsiUtil;
import org.jetbrains.jet.lang.psi.JetScript;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.BindingTraceContext;
import org.jetbrains.jet.lang.resolve.Diagnostics;
@@ -110,11 +111,17 @@ public class KotlinJavaFileStubProvider<T extends WithFileStubAndExtraDiagnostic
public GenerationState.GenerateClassFilter getGenerateClassFilter() {
return new GenerationState.GenerateClassFilter() {
@Override
public boolean shouldProcess(JetClassOrObject classOrObject) {
public boolean shouldProcessClass(JetClassOrObject classOrObject) {
// Top-level classes and such should not be generated for performance reasons.
// Local classes in top-level functions must still be generated
return JetPsiUtil.isLocal(classOrObject);
}
@Override
public boolean shouldProcessScript(JetScript script) {
// Scripts yield top-level classes, and should not be generated
return false;
}
};
}
@@ -215,7 +222,7 @@ public class KotlinJavaFileStubProvider<T extends WithFileStubAndExtraDiagnostic
public GenerationState.GenerateClassFilter getGenerateClassFilter() {
return new GenerationState.GenerateClassFilter() {
@Override
public boolean shouldProcess(JetClassOrObject generatedClassOrObject) {
public boolean shouldProcessClass(JetClassOrObject generatedClassOrObject) {
// Trivial: generate and analyze class we are interested in.
if (generatedClassOrObject == classOrObject) return true;
@@ -246,6 +253,12 @@ public class KotlinJavaFileStubProvider<T extends WithFileStubAndExtraDiagnostic
return false;
}
@Override
public boolean shouldProcessScript(JetScript script) {
// We generate all enclosing classes
return PsiTreeUtil.isAncestor(script, classOrObject, false);
}
};
}