Annotate additional files through bytecode toolwindow analysis

This commit is contained in:
Michael Bogdanov
2015-02-19 13:29:49 +03:00
parent ab29c59210
commit 37006ad566
5 changed files with 97 additions and 23 deletions
@@ -302,7 +302,7 @@ public class PackageCodegen {
}
else if (declaration instanceof JetClassOrObject) {
JetClassOrObject classOrObject = (JetClassOrObject) declaration;
if (state.getGenerateDeclaredClassFilter().shouldProcessClass(classOrObject)) {
if (state.getGenerateDeclaredClassFilter().shouldGenerateClass(classOrObject)) {
generateClassOrObject(classOrObject);
}
}
@@ -310,13 +310,13 @@ public class PackageCodegen {
JetScript script = (JetScript) declaration;
// SCRIPT: generate script code, should be separate execution branch
if (state.getGenerateDeclaredClassFilter().shouldProcessScript(script)) {
if (state.getGenerateDeclaredClassFilter().shouldGenerateScript(script)) {
ScriptCodegen.createScriptCodegen(script, state, packagePartContext).generate();
}
}
}
if (!generatePackagePart) return null;
if (!generatePackagePart || !state.getGenerateDeclaredClassFilter().shouldGeneratePackagePart(file)) return null;
ClassBuilder builder = state.getFactory().newVisitor(PackagePart(file, packageFragment), packagePartType, file);
@@ -207,7 +207,7 @@ class CodegenAnnotatingVisitor extends JetVisitorVoid {
@Override
public void visitObjectDeclaration(@NotNull JetObjectDeclaration declaration) {
if (!filter.shouldProcessClass(declaration)) return;
if (!filter.shouldAnnotateClass(declaration)) return;
ClassDescriptor classDescriptor = bindingContext.get(CLASS, declaration);
// working around a problem with shallow analysis
@@ -225,7 +225,7 @@ class CodegenAnnotatingVisitor extends JetVisitorVoid {
@Override
public void visitClass(@NotNull JetClass klass) {
if (!filter.shouldProcessClass(klass)) return;
if (!filter.shouldAnnotateClass(klass)) return;
ClassDescriptor classDescriptor = bindingContext.get(CLASS, klass);
// working around a problem with shallow analysis
@@ -43,17 +43,29 @@ import java.util.List;
public class GenerationState {
public interface GenerateClassFilter {
boolean shouldProcessClass(JetClassOrObject classOrObject);
boolean shouldProcessScript(JetScript script);
boolean shouldAnnotateClass(JetClassOrObject classOrObject);
boolean shouldGenerateClass(JetClassOrObject classOrObject);
boolean shouldGeneratePackagePart(JetFile jetFile);
boolean shouldGenerateScript(JetScript script);
GenerateClassFilter GENERATE_ALL = new GenerateClassFilter() {
@Override
public boolean shouldProcessClass(JetClassOrObject classOrObject) {
public boolean shouldAnnotateClass(JetClassOrObject classOrObject) {
return true;
}
@Override
public boolean shouldProcessScript(JetScript script) {
public boolean shouldGenerateClass(JetClassOrObject classOrObject) {
return true;
}
@Override
public boolean shouldGenerateScript(JetScript script) {
return true;
}
@Override
public boolean shouldGeneratePackagePart(JetFile jetFile) {
return true;
}
};