aboutsummaryrefslogtreecommitdiff
path: root/src/core/lombok/javac/JavacTransformer.java
diff options
context:
space:
mode:
authorReinier Zwitserloot <reinier@zwitserloot.com>2010-11-09 20:35:34 +0100
committerReinier Zwitserloot <reinier@zwitserloot.com>2010-11-09 20:35:34 +0100
commit0951ea38fe11189cdc4c2778fdad9e9e3ad6a6ae (patch)
treeae333b513a3cde5143405c0f7399faee880feddd /src/core/lombok/javac/JavacTransformer.java
parent04d041a7dcb4f57c5b5bf460cf78cddfaba4853b (diff)
downloadlombok-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.java34
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;
}