diff options
Diffstat (limited to 'src/lombok')
| -rw-r--r-- | src/lombok/core/PrintAST.java | 4 | ||||
| -rw-r--r-- | src/lombok/eclipse/EclipseASTVisitor.java | 21 | ||||
| -rw-r--r-- | src/lombok/eclipse/handlers/HandlePrintAST.java | 16 | ||||
| -rw-r--r-- | src/lombok/javac/JavacASTVisitor.java | 25 | ||||
| -rw-r--r-- | src/lombok/javac/handlers/HandlePrintAST.java | 16 | 
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;  	}  } | 
