package org.ikejima.javappp.sample; import java.util.Iterator; import org.ikejima.javappp.util.TraceVisitor; import com.sun.tools.javac.main.PreProcess; import com.sun.tools.javac.tree.JCTree; import com.sun.tools.javac.tree.JCTree.JCAnnotation; import com.sun.tools.javac.tree.JCTree.JCArrayAccess; import com.sun.tools.javac.tree.JCTree.JCArrayTypeTree; import com.sun.tools.javac.tree.JCTree.JCAssert; import com.sun.tools.javac.tree.JCTree.JCAssign; import com.sun.tools.javac.tree.JCTree.JCAssignOp; import com.sun.tools.javac.tree.JCTree.JCBinary; import com.sun.tools.javac.tree.JCTree.JCBlock; import com.sun.tools.javac.tree.JCTree.JCBreak; import com.sun.tools.javac.tree.JCTree.JCCase; import com.sun.tools.javac.tree.JCTree.JCCatch; import com.sun.tools.javac.tree.JCTree.JCClassDecl; import com.sun.tools.javac.tree.JCTree.JCCompilationUnit; import com.sun.tools.javac.tree.JCTree.JCConditional; import com.sun.tools.javac.tree.JCTree.JCContinue; import com.sun.tools.javac.tree.JCTree.JCDoWhileLoop; import com.sun.tools.javac.tree.JCTree.JCEnhancedForLoop; import com.sun.tools.javac.tree.JCTree.JCErroneous; import com.sun.tools.javac.tree.JCTree.JCFieldAccess; import com.sun.tools.javac.tree.JCTree.JCForLoop; import com.sun.tools.javac.tree.JCTree.JCIdent; import com.sun.tools.javac.tree.JCTree.JCIf; import com.sun.tools.javac.tree.JCTree.JCImport; import com.sun.tools.javac.tree.JCTree.JCInstanceOf; import com.sun.tools.javac.tree.JCTree.JCLabeledStatement; import com.sun.tools.javac.tree.JCTree.JCLiteral; import com.sun.tools.javac.tree.JCTree.JCMethodDecl; import com.sun.tools.javac.tree.JCTree.JCMethodInvocation; import com.sun.tools.javac.tree.JCTree.JCModifiers; import com.sun.tools.javac.tree.JCTree.JCNewArray; import com.sun.tools.javac.tree.JCTree.JCNewClass; import com.sun.tools.javac.tree.JCTree.JCParens; import com.sun.tools.javac.tree.JCTree.JCPrimitiveTypeTree; import com.sun.tools.javac.tree.JCTree.JCReturn; import com.sun.tools.javac.tree.JCTree.JCSkip; import com.sun.tools.javac.tree.JCTree.JCSwitch; import com.sun.tools.javac.tree.JCTree.JCSynchronized; import com.sun.tools.javac.tree.JCTree.JCThrow; import com.sun.tools.javac.tree.JCTree.JCTry; import com.sun.tools.javac.tree.JCTree.JCTypeApply; import com.sun.tools.javac.tree.JCTree.JCTypeCast; import com.sun.tools.javac.tree.JCTree.JCTypeParameter; import com.sun.tools.javac.tree.JCTree.JCTypeUnion; import com.sun.tools.javac.tree.JCTree.JCUnary; import com.sun.tools.javac.tree.JCTree.JCVariableDecl; import com.sun.tools.javac.tree.JCTree.JCWhileLoop; import com.sun.tools.javac.tree.JCTree.JCWildcard; import com.sun.tools.javac.tree.JCTree.LetExpr; import com.sun.tools.javac.tree.JCTree.TypeBoundKind; import com.sun.tools.javac.tree.JCTree.Visitor; public class DumpTree extends PreProcess { @Override public JCCompilationUnit process(JCCompilationUnit tree) { tree.accept(new TraceVisitor() { int level = 0; private void spc(){ for(int i =0;i<level;i++){ System.out.print(" "); } } private void pr(String str){ spc(); System.out.println(str); } private void pr(String str, String str2){ pr(str + ": " + str2); } @Override public void visitAnnotation(JCAnnotation that) { pr("Annotation"); level++; super.visitAnnotation(that); level--; } @Override public void visitApply(JCMethodInvocation that) { pr("Apply"); level++; super.visitApply(that); level--; } @Override public void visitAssert(JCAssert that) { pr("Assert"); level++; super.visitAssert(that); level--; } @Override public void visitAssign(JCAssign that) { pr("Assign"); level++; super.visitAssign(that); level--; } @Override public void visitAssignop(JCAssignOp that) { pr("AssignOp"); level++; super.visitAssignop(that); level--; } @Override public void visitBinary(JCBinary that) { pr("Binary"); level++; super.visitBinary(that); level--; } @Override public void visitBlock(JCBlock that) { pr("Block"); level++; super.visitBlock(that); level--; } @Override public void visitBreak(JCBreak that) { pr("Break"); level++; super.visitBreak(that); level--; } @Override public void visitCase(JCCase that) { pr("Case"); level++; super.visitCase(that); level--; } @Override public void visitCatch(JCCatch that) { pr("Catch"); level++; super.visitCatch(that); level--; } @Override public void visitClassDef(JCClassDecl that) { pr("ClassDef", that.name.toString()); level++; super.visitClassDef(that); level--; } @Override public void visitConditional(JCConditional that) { pr("Conditional"); level++; super.visitConditional(that); level--; } @Override public void visitContinue(JCContinue that) { pr("Continue"); level++; super.visitContinue(that); level--; } @Override public void visitDoLoop(JCDoWhileLoop that) { pr("DoLoop"); level++; super.visitDoLoop(that); level--; } @Override public void visitErroneous(JCErroneous that) { pr("Erroneous"); level++; super.visitErroneous(that); level--; } @Override public void visitExec(com.sun.tools.javac.tree.JCTree.JCExpressionStatement that) { pr("Exec", that.expr.toString()); level++; super.visitExec(that); level--; } @Override public void visitForeachLoop(JCEnhancedForLoop that) { pr("ForeachLoop"); level++; super.visitForeachLoop(that); level--; } @Override public void visitForLoop(JCForLoop that) { pr("ForLoop"); level++; super.visitForLoop(that); level--; } @Override public void visitIdent(JCIdent that) { pr("Ident", that.getName().toString()); level++; super.visitIdent(that); level--; } @Override public void visitIf(JCIf that) { pr("If"); level++; super.visitIf(that); level--; } @Override public void visitImport(JCImport that) { pr("Import"); level++; super.visitImport(that); level--; } @Override public void visitIndexed(JCArrayAccess that) { pr("Indexed"); level++; super.visitIndexed(that); level--; } @Override public void visitLabelled(JCLabeledStatement that) { pr("Labelled"); level++; super.visitLabelled(that); level--; } @Override public void visitLetExpr(LetExpr that) { pr("LetExpr"); level++; super.visitLetExpr(that); level--; } @Override public void visitLiteral(JCLiteral that) { pr("Literal",that.toString()); level++; super.visitLiteral(that); level--; } @Override public void visitMethodDef(JCMethodDecl that) { pr("MethodDef", that.name.toString()); level++; super.visitMethodDef(that); level--; } @Override public void visitModifiers(JCModifiers that) { pr("Modifires"); level++; super.visitModifiers(that); level--; } @Override public void visitNewArray(JCNewArray that) { pr("NewArray"); level++; super.visitNewArray(that); level--; } @Override public void visitNewClass(JCNewClass that) { pr("NewClass"); level++; super.visitNewClass(that); level--; } @Override public void visitParens(JCParens that) { pr("Parens"); level++; super.visitParens(that); level--; } @Override public void visitReturn(JCReturn that) { pr("Return"); level++; super.visitReturn(that); level--; } @Override public void visitSelect(JCFieldAccess that) { pr("Select",that.getIdentifier().toString()); level++; super.visitSelect(that); level--; } @Override public void visitSkip(JCSkip that) { pr("Skip"); level++; super.visitSkip(that); level--; } @Override public void visitSwitch(JCSwitch that) { pr("Switch"); level++; super.visitSwitch(that); level--; } @Override public void visitSynchronized(JCSynchronized that) { pr("Synchronized"); level++; super.visitSynchronized(that); level--; } @Override public void visitThrow(JCThrow that) { pr("Throw"); level++; super.visitThrow(that); level--; } @Override public void visitTopLevel(JCCompilationUnit that) { pr("TopLevel"); level++; super.visitTopLevel(that); level--; } @Override public void visitTree(JCTree that) { pr("Tree"); level++; super.visitTree(that); level--; } @Override public void visitTry(JCTry that) { pr("Try"); level++; super.visitTry(that); level--; } @Override public void visitTypeApply(JCTypeApply that) { pr("TypeApply"); level++; super.visitTypeApply(that); level--; } @Override public void visitTypeArray(JCArrayTypeTree that) { pr("TypeArray"); level++; super.visitTypeArray(that); level--; } @Override public void visitTypeBoundKind(TypeBoundKind that) { pr("TypeBoundKind"); level++; super.visitTypeBoundKind(that); level--; } @Override public void visitTypeCast(JCTypeCast that) { pr("TypeCast"); level++; super.visitTypeCast(that); level--; } @Override public void visitTypeIdent(JCPrimitiveTypeTree that) { pr("TypeIdent"); level++; super.visitTypeIdent(that); level--; } @Override public void visitTypeParameter(JCTypeParameter that) { pr("TypeParameter"); level++; super.visitTypeParameter(that); level--; } @Override public void visitTypeTest(JCInstanceOf that) { pr("TypeTest"); level++; super.visitTypeTest(that); level--; } @Override public void visitTypeUnion(JCTypeUnion that) { pr("TypeUnion"); level++; super.visitTypeUnion(that); level--; } @Override public void visitUnary(JCUnary that) { pr("Unary"); level++; super.visitUnary(that); level--; } @Override public void visitVarDef(JCVariableDecl that) { pr("VarDef"); level++; super.visitVarDef(that); level--; } @Override public void visitWhileLoop(JCWhileLoop that) { pr("WhileLoop"); level++; super.visitWhileLoop(that); level--; } @Override public void visitWildcard(JCWildcard that) { pr("Wildcard"); level++; super.visitWildcard(that); level--; } }); return tree; } }