📄 pretty.java
字号:
println(); printStats(tree.cases); align(); print("}"); } public void visitCase(Case tree) { if (tree.pat == null) { print("default"); } else { print("case "); printExpr(tree.pat); } print(": "); println(); indent(); printStats(tree.stats); undent(); align(); } public void visitSynchronized(Synchronized tree) { print("synchronized "); if (tree.lock.tag == Tree.PARENS) { printExpr(tree.lock); } else { print("("); printExpr(tree.lock); print(")"); } print(" "); printStat(tree.body); } public void visitTry(Try tree) { print("try "); printStat(tree.body); for (List l = tree.catchers; l.nonEmpty(); l = l.tail) { printStat((Tree) l.head); } if (tree.finalizer != null) { print(" finally "); printStat(tree.finalizer); } } public void visitCatch(Catch tree) { print(" catch ("); printExpr(tree.param); print(") "); printStat(tree.body); } public void visitConditional(Conditional tree) { open(prec, TreeInfo.condPrec); printExpr(tree.cond, TreeInfo.condPrec); print(" ? "); printExpr(tree.truepart, TreeInfo.condPrec); print(" : "); printExpr(tree.falsepart, TreeInfo.condPrec); close(prec, TreeInfo.condPrec); } public void visitIf(If tree) { print("if "); if (tree.cond.tag == Tree.PARENS) { printExpr(tree.cond); } else { print("("); printExpr(tree.cond); print(")"); } print(" "); printStat(tree.thenpart); if (tree.elsepart != null) { print(" else "); printStat(tree.elsepart); } } public void visitExec(Exec tree) { printExpr(tree.expr); if (prec == TreeInfo.notExpression) print(";"); } public void visitBreak(Break tree) { print("break"); if (tree.label != null) print(" " + tree.label); print(";"); } public void visitContinue(Continue tree) { print("continue"); if (tree.label != null) print(" " + tree.label); print(";"); } public void visitReturn(Return tree) { print("return"); if (tree.expr != null) { print(" "); printExpr(tree.expr); } print(";"); } public void visitThrow(Throw tree) { print("throw "); printExpr(tree.expr); print(";"); } public void visitAssert(Assert tree) { print("assert "); printExpr(tree.cond); if (tree.detail != null) { print(" : "); printExpr(tree.detail); } print(";"); } public void visitApply(Apply tree) { printExpr(tree.meth); print("("); printExprs(tree.args); print(")"); } public void visitNewClass(NewClass tree) { if (tree.encl != null) { printExpr(tree.encl); print("."); } print("new "); printExpr(tree.clazz); print("("); printExprs(tree.args); print(")"); if (tree.def != null) { Name enclClassNamePrev = enclClassName; enclClassName = null; printBlock(((ClassDef) tree.def).defs); enclClassName = enclClassNamePrev; } } public void visitNewArray(NewArray tree) { if (tree.elemtype != null) { print("new "); int n = 0; Tree elemtype = tree.elemtype; while (elemtype.tag == Tree.TYPEARRAY) { n++; elemtype = ((TypeArray) elemtype).elemtype; } printExpr(elemtype); for (List l = tree.dims; l.nonEmpty(); l = l.tail) { print("["); printExpr((Tree) l.head); print("]"); } for (int i = 0; i < n; i++) { print("[]"); } if (tree.elems != null) { print("[]"); } } if (tree.elems != null) { print("{"); printExprs(tree.elems); print("}"); } } public void visitParens(Parens tree) { print("("); printExpr(tree.expr); print(")"); } public void visitAssign(Assign tree) { open(prec, TreeInfo.assignPrec); printExpr(tree.lhs, TreeInfo.assignPrec + 1); print(" = "); printExpr(tree.rhs, TreeInfo.assignPrec); close(prec, TreeInfo.assignPrec); } public String operatorName(int tag) { switch (tag) { case Tree.POS: return "+"; case Tree.NEG: return "-"; case Tree.NOT: return "!"; case Tree.COMPL: return "~"; case Tree.PREINC: return "++"; case Tree.PREDEC: return "--"; case Tree.POSTINC: return "++"; case Tree.POSTDEC: return "--"; case Tree.NULLCHK: return "<*nullchk*>"; case Tree.OR: return "||"; case Tree.AND: return "&&"; case Tree.EQ: return "=="; case Tree.NE: return "!="; case Tree.LT: return "<"; case Tree.GT: return ">"; case Tree.LE: return "<="; case Tree.GE: return ">="; case Tree.BITOR: return "|"; case Tree.BITXOR: return "^"; case Tree.BITAND: return "&"; case Tree.SL: return "<<"; case Tree.SR: return ">>"; case Tree.USR: return ">>>"; case Tree.PLUS: return "+"; case Tree.MINUS: return "-"; case Tree.MUL: return "*"; case Tree.DIV: return "/"; case Tree.MOD: return "%"; default: throw new Error(); } } public void visitAssignop(Assignop tree) { open(prec, TreeInfo.assignopPrec); printExpr(tree.lhs, TreeInfo.assignopPrec + 1); print(" " + operatorName(tree.tag - Tree.ASGOffset) + "= "); printExpr(tree.rhs, TreeInfo.assignopPrec); close(prec, TreeInfo.assignopPrec); } public void visitUnary(Unary tree) { int ownprec = TreeInfo.opPrec(tree.tag); String opname = operatorName(tree.tag).toString(); open(prec, ownprec); if (tree.tag <= Tree.PREDEC) { print(opname); printExpr(tree.arg, ownprec); } else { printExpr(tree.arg, ownprec); print(opname); } close(prec, ownprec); } public void visitBinary(Binary tree) { int ownprec = TreeInfo.opPrec(tree.tag); String opname = operatorName(tree.tag).toString(); open(prec, ownprec); printExpr(tree.lhs, ownprec); print(" " + opname + " "); printExpr(tree.rhs, ownprec + 1); close(prec, ownprec); } public void visitTypeCast(TypeCast tree) { open(prec, TreeInfo.prefixPrec); print("("); printExpr(tree.clazz); print(")"); printExpr(tree.expr, TreeInfo.prefixPrec); close(prec, TreeInfo.prefixPrec); } public void visitTypeTest(TypeTest tree) { open(prec, TreeInfo.ordPrec); printExpr(tree.expr, TreeInfo.ordPrec); print(" instanceof "); printExpr(tree.clazz, TreeInfo.ordPrec + 1); close(prec, TreeInfo.ordPrec); } public void visitIndexed(Indexed tree) { printExpr(tree.indexed, TreeInfo.postfixPrec); print("["); printExpr(tree.index); print("]"); } public void visitSelect(Select tree) { printExpr(tree.selected, TreeInfo.postfixPrec); print("." + tree.name); } public void visitIdent(Ident tree) { print(tree.name.toString()); } public void visitLiteral(Literal tree) { switch (tree.typetag) { case Type.INT: print(tree.value.toString()); break; case Type.LONG: print(tree.value.toString() + "L"); break; case Type.FLOAT: print(tree.value.toString() + "F"); break; case Type.DOUBLE: print(tree.value.toString()); break; case Type.CHAR: print("\'" + Convert.quote( String.valueOf((char)((Number) tree.value).intValue())) + "\'"); break; case Type.CLASS: print("\"" + Convert.quote((String) tree.value) + "\""); break; default: print(tree.value.toString()); } } public void visitTypeIdent(TypeIdent tree) { switch (tree.typetag) { case TypeTags.BYTE: print("byte"); break; case TypeTags.CHAR: print("char"); break; case TypeTags.SHORT: print("short"); break; case TypeTags.INT: print("int"); break; case TypeTags.LONG: print("long"); break; case TypeTags.FLOAT: print("float"); break; case TypeTags.DOUBLE: print("double"); break; case TypeTags.BOOLEAN: print("boolean"); break; case TypeTags.VOID: print("void"); break; default: print("error"); break; } } public void visitTypeArray(TypeArray tree) { printExpr(tree.elemtype); print("[]"); } public void visitErroneous(Erroneous tree) { print("(ERROR)"); } public void visitTree(Tree tree) { print("(UNKNOWN: " + tree + ")"); println(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -