diff options
author | Reinier Zwitserloot <reinier@zwitserloot.com> | 2010-11-09 20:35:34 +0100 |
---|---|---|
committer | Reinier Zwitserloot <reinier@zwitserloot.com> | 2010-11-09 20:35:34 +0100 |
commit | 0951ea38fe11189cdc4c2778fdad9e9e3ad6a6ae (patch) | |
tree | ae333b513a3cde5143405c0f7399faee880feddd /src/core/lombok/javac/JavacTransformer.java | |
parent | 04d041a7dcb4f57c5b5bf460cf78cddfaba4853b (diff) | |
download | lombok-0951ea38fe11189cdc4c2778fdad9e9e3ad6a6ae.tar.gz lombok-0951ea38fe11189cdc4c2778fdad9e9e3ad6a6ae.tar.bz2 lombok-0951ea38fe11189cdc4c2778fdad9e9e3ad6a6ae.zip |
Experiment to try and make java 'self referential' by deleting the Enter and MemberEnter state. So far it doesn't work yet.
Diffstat (limited to 'src/core/lombok/javac/JavacTransformer.java')
-rw-r--r-- | src/core/lombok/javac/JavacTransformer.java | 34 |
1 files changed, 29 insertions, 5 deletions
diff --git a/src/core/lombok/javac/JavacTransformer.java b/src/core/lombok/javac/JavacTransformer.java index 5f145460..c703b1c7 100644 --- a/src/core/lombok/javac/JavacTransformer.java +++ b/src/core/lombok/javac/JavacTransformer.java @@ -22,16 +22,18 @@ package lombok.javac; import java.util.ArrayList; -import java.util.List; import javax.annotation.processing.Messager; +import com.sun.tools.javac.comp.Enter; +import com.sun.tools.javac.comp.MemberEnter; import com.sun.tools.javac.tree.JCTree.JCAnnotation; import com.sun.tools.javac.tree.JCTree.JCClassDecl; import com.sun.tools.javac.tree.JCTree.JCCompilationUnit; import com.sun.tools.javac.tree.JCTree.JCMethodDecl; import com.sun.tools.javac.tree.JCTree.JCVariableDecl; import com.sun.tools.javac.util.Context; +import com.sun.tools.javac.util.List; public class JavacTransformer { private final HandlerLibrary handlers; @@ -42,18 +44,39 @@ public class JavacTransformer { this.handlers = HandlerLibrary.load(messager); } - public boolean transform(Context context, Iterable<JCCompilationUnit> compilationUnits) { - List<JavacAST> asts = new ArrayList<JavacAST>(); + public boolean transform(Context context, java.util.List<JCCompilationUnit> compilationUnitsRaw) { + List<JCCompilationUnit> compilationUnits; + if (compilationUnitsRaw instanceof List<?>) { + compilationUnits = (List<JCCompilationUnit>)compilationUnitsRaw; + } else { + compilationUnits = List.nil(); + for (int i = compilationUnitsRaw.size() -1; i >= 0; i--) { + compilationUnits = compilationUnits.prepend(compilationUnitsRaw.get(i)); + } + } + + java.util.List<JavacAST> asts = new ArrayList<JavacAST>(); for (JCCompilationUnit unit : compilationUnits) asts.add(new JavacAST(messager, context, unit)); - handlers.skipPrintAST(); + handlers.setPreResolutionPhase(); + for (JavacAST ast : asts) { + ast.traverse(new AnnotationVisitor()); + handlers.callASTVisitors(ast); + } + + context.put(Enter.class, (Enter) null); + context.put(MemberEnter.class, (MemberEnter) null); + Enter.instance(context).main(compilationUnits); + + handlers.setPostResolutionPhase(); for (JavacAST ast : asts) { ast.traverse(new AnnotationVisitor()); handlers.callASTVisitors(ast); } - handlers.skipAllButPrintAST(); + + handlers.setPrintASTPhase(); for (JavacAST ast : asts) { ast.traverse(new AnnotationVisitor()); } @@ -61,6 +84,7 @@ public class JavacTransformer { for (JavacAST ast : asts) { if (ast.isChanged()) return true; } + return false; } |