pretty.java

来自「是一款用JAVA 编写的编译器 具有很强的编译功能」· Java 代码 · 共 1,225 行 · 第 1/3 页

JAVA
1,225
字号
                    printExprs(tree.implementing);                }            } else {                if ((tree.mods.flags & ENUM) != 0)                    print("enum " + tree.name);                else                    print("class " + tree.name);                printTypeParameters(tree.typarams);                if (tree.extending != null) {                    print(" extends ");                    printExpr(tree.extending);                }                if (tree.implementing.nonEmpty()) {                    print(" implements ");                    printExprs(tree.implementing);                }            }            print(" ");            if ((tree.mods.flags & ENUM) != 0) {                printEnumBody(tree.defs);            } else {                printBlock(tree.defs);            }            enclClassName = enclClassNamePrev;        } catch (IOException e) {            throw new UncheckedIOException(e);        }    }    public void visitMethodDef(JCMethodDecl tree) {        try {            // when producing source output, omit anonymous constructors            if (tree.name == tree.name.table.init &&                    enclClassName == null &&                    sourceOutput) return;            println(); align();            printDocComment(tree);            printExpr(tree.mods);            printTypeParameters(tree.typarams);            if (tree.name == tree.name.table.init) {                print(enclClassName != null ? enclClassName : tree.name);            } else {                printExpr(tree.restype);                print(" " + tree.name);            }            print("(");            printExprs(tree.params);            print(")");            if (tree.thrown.nonEmpty()) {                print(" throws ");                printExprs(tree.thrown);            }            if (tree.body != null) {                print(" ");                printStat(tree.body);            } else {                print(";");            }        } catch (IOException e) {            throw new UncheckedIOException(e);        }    }    public void visitVarDef(JCVariableDecl tree) {        try {            if (docComments != null && docComments.get(tree) != null) {                println(); align();            }            printDocComment(tree);            if ((tree.mods.flags & ENUM) != 0) {                print("/*public static final*/ ");                print(tree.name);                if (tree.init != null) {                    print(" /* = ");                    printExpr(tree.init);                    print(" */");                }            } else {                printExpr(tree.mods);                if ((tree.mods.flags & VARARGS) != 0) {                    printExpr(((JCArrayTypeTree) tree.vartype).elemtype);                    print("... " + tree.name);                } else {                    printExpr(tree.vartype);                    print(" " + tree.name);                }                if (tree.init != null) {                    print(" = ");                    printExpr(tree.init);                }                if (prec == TreeInfo.notExpression) print(";");            }        } catch (IOException e) {            throw new UncheckedIOException(e);        }    }    public void visitSkip(JCSkip tree) {        try {            print(";");        } catch (IOException e) {            throw new UncheckedIOException(e);        }    }    public void visitBlock(JCBlock tree) {        try {            printFlags(tree.flags);            printBlock(tree.stats);        } catch (IOException e) {            throw new UncheckedIOException(e);        }    }    public void visitDoLoop(JCDoWhileLoop tree) {        try {            print("do ");            printStat(tree.body);            align();            print(" while ");            if (tree.cond.getTag() == JCTree.PARENS) {                printExpr(tree.cond);            } else {                print("(");                printExpr(tree.cond);                print(")");            }            print(";");        } catch (IOException e) {            throw new UncheckedIOException(e);        }    }    public void visitWhileLoop(JCWhileLoop tree) {        try {            print("while ");            if (tree.cond.getTag() == JCTree.PARENS) {                printExpr(tree.cond);            } else {                print("(");                printExpr(tree.cond);                print(")");            }            print(" ");            printStat(tree.body);        } catch (IOException e) {            throw new UncheckedIOException(e);        }    }    public void visitForLoop(JCForLoop tree) {        try {            print("for (");            if (tree.init.nonEmpty()) {                if (tree.init.head.getTag() == JCTree.VARDEF) {                    printExpr(tree.init.head);                    for (List<JCStatement> l = tree.init.tail; l.nonEmpty(); l = l.tail) {                        JCVariableDecl vdef = (JCVariableDecl)l.head;                        print(", " + vdef.name + " = ");                        printExpr(vdef.init);                    }                } else {                    printExprs(tree.init);                }            }            print("; ");            if (tree.cond != null) printExpr(tree.cond);            print("; ");            printExprs(tree.step);            print(") ");            printStat(tree.body);        } catch (IOException e) {            throw new UncheckedIOException(e);        }    }    public void visitForeachLoop(JCEnhancedForLoop tree) {        try {            print("for (");            printExpr(tree.var);            print(" : ");            printExpr(tree.expr);            print(") ");            printStat(tree.body);        } catch (IOException e) {            throw new UncheckedIOException(e);        }    }    public void visitLabelled(JCLabeledStatement tree) {        try {            print(tree.label + ": ");            printStat(tree.body);        } catch (IOException e) {            throw new UncheckedIOException(e);        }    }    public void visitSwitch(JCSwitch tree) {        try {            print("switch ");            if (tree.selector.getTag() == JCTree.PARENS) {                printExpr(tree.selector);            } else {                print("(");                printExpr(tree.selector);                print(")");            }            print(" {");            println();            printStats(tree.cases);            align();            print("}");        } catch (IOException e) {            throw new UncheckedIOException(e);        }    }    public void visitCase(JCCase tree) {        try {            if (tree.pat == null) {                print("default");            } else {                print("case ");                printExpr(tree.pat);            }            print(": ");            println();            indent();            printStats(tree.stats);            undent();            align();        } catch (IOException e) {            throw new UncheckedIOException(e);        }    }    public void visitSynchronized(JCSynchronized tree) {        try {            print("synchronized ");            if (tree.lock.getTag() == JCTree.PARENS) {                printExpr(tree.lock);            } else {                print("(");                printExpr(tree.lock);                print(")");            }            print(" ");            printStat(tree.body);        } catch (IOException e) {            throw new UncheckedIOException(e);        }    }    public void visitTry(JCTry tree) {        try {            print("try ");            printStat(tree.body);            for (List<JCCatch> l = tree.catchers; l.nonEmpty(); l = l.tail) {                printStat(l.head);            }            if (tree.finalizer != null) {                print(" finally ");                printStat(tree.finalizer);            }        } catch (IOException e) {            throw new UncheckedIOException(e);        }    }    public void visitCatch(JCCatch tree) {        try {            print(" catch (");            printExpr(tree.param);            print(") ");            printStat(tree.body);        } catch (IOException e) {            throw new UncheckedIOException(e);        }    }    public void visitConditional(JCConditional tree) {        try {            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);        } catch (IOException e) {            throw new UncheckedIOException(e);        }    }    public void visitIf(JCIf tree) {        try {            print("if ");            if (tree.cond.getTag() == JCTree.PARENS) {                printExpr(tree.cond);            } else {                print("(");                printExpr(tree.cond);                print(")");            }            print(" ");            printStat(tree.thenpart);            if (tree.elsepart != null) {                print(" else ");                printStat(tree.elsepart);            }        } catch (IOException e) {            throw new UncheckedIOException(e);        }    }    public void visitExec(JCExpressionStatement tree) {        try {            printExpr(tree.expr);            if (prec == TreeInfo.notExpression) print(";");        } catch (IOException e) {            throw new UncheckedIOException(e);        }    }    public void visitBreak(JCBreak tree) {        try {            print("break");            if (tree.label != null) print(" " + tree.label);            print(";");        } catch (IOException e) {            throw new UncheckedIOException(e);        }    }    public void visitContinue(JCContinue tree) {        try {            print("continue");            if (tree.label != null) print(" " + tree.label);            print(";");        } catch (IOException e) {            throw new UncheckedIOException(e);        }    }    public void visitReturn(JCReturn tree) {        try {            print("return");            if (tree.expr != null) {                print(" ");                printExpr(tree.expr);            }            print(";");        } catch (IOException e) {            throw new UncheckedIOException(e);        }    }    public void visitThrow(JCThrow tree) {        try {            print("throw ");            printExpr(tree.expr);            print(";");        } catch (IOException e) {            throw new UncheckedIOException(e);        }    }    public void visitAssert(JCAssert tree) {        try {            print("assert ");            printExpr(tree.cond);            if (tree.detail != null) {                print(" : ");                printExpr(tree.detail);            }            print(";");        } catch (IOException e) {            throw new UncheckedIOException(e);        }    }    public void visitApply(JCMethodInvocation tree) {        try {            if (!tree.typeargs.isEmpty()) {                if (tree.meth.getTag() == JCTree.SELECT) {                    JCFieldAccess left = (JCFieldAccess)tree.meth;                    printExpr(left.selected);                    print(".<");                    printExprs(tree.typeargs);                    print(">" + left.name);                } else {                    print("<");                    printExprs(tree.typeargs);                    print(">");                    printExpr(tree.meth);                }            } else {                printExpr(tree.meth);            }            print("(");            printExprs(tree.args);            print(")");        } catch (IOException e) {            throw new UncheckedIOException(e);        }    }    public void visitNewClass(JCNewClass tree) {

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?