aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lombok/core/PrintAST.java4
-rw-r--r--src/lombok/eclipse/EclipseASTVisitor.java21
-rw-r--r--src/lombok/eclipse/handlers/HandlePrintAST.java16
-rw-r--r--src/lombok/javac/JavacASTVisitor.java25
-rw-r--r--src/lombok/javac/handlers/HandlePrintAST.java16
5 files changed, 74 insertions, 8 deletions
diff --git a/src/lombok/core/PrintAST.java b/src/lombok/core/PrintAST.java
index 3ad2bd68..9fb12b2c 100644
--- a/src/lombok/core/PrintAST.java
+++ b/src/lombok/core/PrintAST.java
@@ -7,4 +7,6 @@ import java.lang.annotation.Target;
@Target({ElementType.CONSTRUCTOR, ElementType.FIELD, ElementType.LOCAL_VARIABLE, ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.SOURCE)
-public @interface PrintAST {}
+public @interface PrintAST {
+ String outfile() default "";
+}
diff --git a/src/lombok/eclipse/EclipseASTVisitor.java b/src/lombok/eclipse/EclipseASTVisitor.java
index 0e07162c..d5fece8f 100644
--- a/src/lombok/eclipse/EclipseASTVisitor.java
+++ b/src/lombok/eclipse/EclipseASTVisitor.java
@@ -1,5 +1,8 @@
package lombok.eclipse;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.PrintStream;
import java.lang.reflect.Modifier;
import lombok.eclipse.EclipseAST.Node;
@@ -79,12 +82,26 @@ public interface EclipseASTVisitor {
void visitStatement(Node statementNode, Statement statement);
void endVisitStatement(Node statementNode, Statement statement);
- public static class EclipseASTPrinter implements EclipseASTVisitor {
+ public static class Printer implements EclipseASTVisitor {
+ private final PrintStream out;
+ public Printer() {
+ this(System.out);
+ }
+
+ public Printer(File file) throws FileNotFoundException {
+ this(new PrintStream(file));
+ }
+
+ public Printer(PrintStream out) {
+ this.out = out;
+ }
+
int indent = 0;
private void print(String text, Object... params) {
StringBuilder sb = new StringBuilder();
for ( int i = 0 ; i < indent ; i++ ) sb.append(" ");
- System.out.printf(sb.append(text).append('\n').toString(), params);
+ out.printf(sb.append(text).append('\n').toString(), params);
+ out.flush();
}
private String str(char[] c) {
diff --git a/src/lombok/eclipse/handlers/HandlePrintAST.java b/src/lombok/eclipse/handlers/HandlePrintAST.java
index 4438f4e4..ae34c5c2 100644
--- a/src/lombok/eclipse/handlers/HandlePrintAST.java
+++ b/src/lombok/eclipse/handlers/HandlePrintAST.java
@@ -1,8 +1,13 @@
package lombok.eclipse.handlers;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.PrintStream;
+
import org.eclipse.jdt.internal.compiler.ast.Annotation;
import org.mangosdk.spi.ProviderFor;
+import lombok.Lombok;
import lombok.core.AnnotationValues;
import lombok.core.PrintAST;
import lombok.eclipse.EclipseASTVisitor;
@@ -13,7 +18,16 @@ import lombok.eclipse.EclipseAST.Node;
public class HandlePrintAST implements EclipseAnnotationHandler<PrintAST> {
@Override public boolean handle(AnnotationValues<PrintAST> annotation, Annotation ast, Node annotationNode) {
if ( !annotationNode.isCompleteParse() ) return false;
- annotationNode.up().traverse(new EclipseASTVisitor.EclipseASTPrinter());
+
+ PrintStream stream = System.out;
+ String fileName = annotation.getInstance().outfile();
+ if ( fileName.length() > 0 ) try {
+ stream = new PrintStream(new File(fileName));
+ } catch ( FileNotFoundException e ) {
+ Lombok.sneakyThrow(e);
+ }
+
+ annotationNode.up().traverse(new EclipseASTVisitor.Printer(stream));
return true;
}
}
diff --git a/src/lombok/javac/JavacASTVisitor.java b/src/lombok/javac/JavacASTVisitor.java
index 5c9c736f..4dc40784 100644
--- a/src/lombok/javac/JavacASTVisitor.java
+++ b/src/lombok/javac/JavacASTVisitor.java
@@ -1,5 +1,9 @@
package lombok.javac;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.PrintStream;
+
import lombok.javac.JavacAST.Node;
import com.sun.tools.javac.tree.JCTree;
@@ -66,16 +70,31 @@ public interface JavacASTVisitor {
void visitStatement(Node statementNode, JCTree statement);
void endVisitStatement(Node statementNode, JCTree statement);
- public static class JavacASTPrinter implements JavacASTVisitor {
+ public static class Printer implements JavacASTVisitor {
+ private final PrintStream out;
+
+ public Printer() {
+ this(System.out);
+ }
+
+ public Printer(File file) throws FileNotFoundException {
+ this(new PrintStream(file));
+ }
+
+ public Printer(PrintStream out) {
+ this.out = out;
+ }
+
int indent = 0;
private void print(String text, Object... params) {
StringBuilder sb = new StringBuilder();
for ( int i = 0 ; i < indent ; i++ ) sb.append(" ");
- System.out.printf(sb.append(text).append('\n').toString(), params);
+ out.printf(sb.append(text).append('\n').toString(), params);
+ out.flush();
}
@Override public void visitCompilationUnit(Node Node, JCCompilationUnit unit) {
- System.out.println("---------------------------------------------------------");
+ out.println("---------------------------------------------------------");
print("<CU %s>", Node.getFileName());
indent++;
diff --git a/src/lombok/javac/handlers/HandlePrintAST.java b/src/lombok/javac/handlers/HandlePrintAST.java
index 3a738b4f..6becb7b8 100644
--- a/src/lombok/javac/handlers/HandlePrintAST.java
+++ b/src/lombok/javac/handlers/HandlePrintAST.java
@@ -1,9 +1,14 @@
package lombok.javac.handlers;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.PrintStream;
+
import org.mangosdk.spi.ProviderFor;
import com.sun.tools.javac.tree.JCTree.JCAnnotation;
+import lombok.Lombok;
import lombok.core.AnnotationValues;
import lombok.core.PrintAST;
import lombok.javac.JavacASTVisitor;
@@ -13,7 +18,16 @@ import lombok.javac.JavacAST.Node;
@ProviderFor(JavacAnnotationHandler.class)
public class HandlePrintAST implements JavacAnnotationHandler<PrintAST> {
@Override public boolean handle(AnnotationValues<PrintAST> annotation, JCAnnotation ast, Node annotationNode) {
- annotationNode.up().traverse(new JavacASTVisitor.JavacASTPrinter());
+ PrintStream stream = System.out;
+ String fileName = annotation.getInstance().outfile();
+ if ( fileName.length() > 0 ) try {
+ stream = new PrintStream(new File(fileName));
+ } catch ( FileNotFoundException e ) {
+ Lombok.sneakyThrow(e);
+ }
+
+ annotationNode.up().traverse(new JavacASTVisitor.Printer(stream));
+
return true;
}
}