📄 sourceprinter.java
字号:
print(t,visit,"this",null,null); } public void visitLiteralThrow(GroovySourceAST t, int visit) { print(t,visit,"throw ",null,null); } public void visitLiteralTrue(GroovySourceAST t,int visit) { print(t,visit,"true",null,null); } public void visitLiteralTry(GroovySourceAST t,int visit) { print(t,visit,"try ",null,null); } public void visitLiteralVoid(GroovySourceAST t,int visit) { print(t,visit,"void",null," "); } public void visitLiteralWhile(GroovySourceAST t,int visit) { printUpdatingTabLevel(t,visit,"while (",null,") "); } public void visitLnot(GroovySourceAST t, int visit) { print(t,visit,"!",null,null); } public void visitLt(GroovySourceAST t, int visit) { print(t,visit," < ",null,null); } public void visitMapConstructor(GroovySourceAST t, int visit) { if (t.getNumberOfChildren() == 0) { print(t,visit,"[:]",null,null); } else { printUpdatingTabLevel(t,visit,"[",null,"]"); } } public void visitMemberPointer(GroovySourceAST t, int visit) { print(t,visit,".&",null,null); } public void visitMethodCall(GroovySourceAST t,int visit) { printUpdatingTabLevel(t,visit,"("," ",")"); } public void visitMinus(GroovySourceAST t,int visit) { print(t,visit," - ",null,null); } public void visitMethodDef(GroovySourceAST t,int visit) { //do nothing } public void visitModifiers(GroovySourceAST t,int visit) { //do nothing } public void visitNotEqual(GroovySourceAST t, int visit) { print(t,visit," != ",null,null); } public void visitNumInt(GroovySourceAST t,int visit) { print(t,visit,t.getText(),null,null); } public void visitNumFloat(GroovySourceAST t,int visit) { print(t,visit,t.getText(),null,null); } public void visitObjblock(GroovySourceAST t,int visit) { if (visit == OPENING_VISIT) { tabLevel++; print(t,visit,"{"); } else { tabLevel--; print(t,visit,"}"); } } public void visitPackageDef(GroovySourceAST t, int visit) { print(t,visit,"package ",null,null); } public void visitParameterDef(GroovySourceAST t,int visit) { //do nothing } public void visitParameters(GroovySourceAST t,int visit) { printUpdatingTabLevel(t,visit,"(",", ",") "); } public void visitPlus(GroovySourceAST t, int visit) { print(t,visit," + ",null,null); } public void visitQuestion(GroovySourceAST t, int visit) { // ternary operator print(t,visit,"?",":",null); } public void visitRangeExclusive(GroovySourceAST t, int visit) { print(t,visit,"..<",null,null); } public void visitRangeInclusive(GroovySourceAST t, int visit) { print(t,visit,"..",null,null); } public void visitSlist(GroovySourceAST t,int visit) { if (visit == OPENING_VISIT) { tabLevel++; print(t,visit,"{"); } else { tabLevel--; print(t,visit,"}"); } } public void visitStar(GroovySourceAST t,int visit) { print(t,visit,"*",null,null); } public void visitStringConstructor(GroovySourceAST t,int visit) { if (visit == OPENING_VISIT) { stringConstructorCounter = 0; print(t,visit,"\""); } if (visit == SUBSEQUENT_VISIT) { // every other subsequent visit use an escaping $ if (stringConstructorCounter % 2 == 0) { print(t,visit,"$"); } stringConstructorCounter++; } if (visit == CLOSING_VISIT) { print(t,visit,"\""); } } public void visitStringLiteral(GroovySourceAST t,int visit) { if (visit == OPENING_VISIT) { String theString = escape(t.getText()); if (getParentNode().getType() != GroovyTokenTypes.LABELED_ARG && getParentNode().getType() != GroovyTokenTypes.STRING_CONSTRUCTOR) { theString = "\"" + theString + "\""; } print(t,visit,theString); } } private String escape(String literal) { literal = literal.replaceAll("\n","\\\\<<REMOVE>>n"); // can't seem to do \n in one go with Java regex literal = literal.replaceAll("<<REMOVE>>",""); return literal; } public void visitType(GroovySourceAST t,int visit) { GroovySourceAST parent = getParentNode(); GroovySourceAST modifiers = parent.childOfType(GroovyTokenTypes.MODIFIERS); // No need to print 'def' if we already have some modifiers if (modifiers == null || modifiers.getNumberOfChildren() == 0) { if (visit == OPENING_VISIT) { if (t.getNumberOfChildren() == 0) { print(t,visit,"def"); } } if (visit == CLOSING_VISIT) { print(t,visit," "); } } } public void visitTypecast(GroovySourceAST t,int visit) { print(t,visit,"(",null,")"); } public void visitVariableDef(GroovySourceAST t,int visit) { // do nothing } public void visitDefault(GroovySourceAST t,int visit) { if (visit == OPENING_VISIT) { print(t,visit,"<" + tokenNames[t.getType()] + ">"); //out.print("<" + t.getType() + ">"); } else { print(t,visit,"</" + tokenNames[t.getType()] + ">"); //out.print("</" + t.getType() + ">"); } } protected void printUpdatingTabLevel(GroovySourceAST t,int visit,String opening, String subsequent, String closing) { if (visit == OPENING_VISIT && opening != null) { print(t,visit,opening); tabLevel++; } if (visit == SUBSEQUENT_VISIT && subsequent != null) { print(t,visit,subsequent); } if (visit == CLOSING_VISIT && closing != null) { tabLevel--; print(t,visit,closing); } } protected void print(GroovySourceAST t,int visit,String opening, String subsequent, String closing) { if (visit == OPENING_VISIT && opening != null) { print(t,visit,opening); } if (visit == SUBSEQUENT_VISIT && subsequent != null) { print(t,visit,subsequent); } if (visit == CLOSING_VISIT && closing != null) { print(t,visit,closing); } } protected void print(GroovySourceAST t,int visit,String value) { if(visit == OPENING_VISIT) { printNewlineAndIndent(t, visit); } if (visit == CLOSING_VISIT) { printNewlineAndIndent(t, visit); } out.print(value); } protected void printNewlineAndIndent(GroovySourceAST t, int visit) { int currentLine = t.getLine(); if (lastLinePrinted == 0) { lastLinePrinted = currentLine; } if (lastLinePrinted != currentLine) { if (newLines) { if (!(visit == OPENING_VISIT && t.getType() == GroovyTokenTypes.SLIST)) { for (int i=lastLinePrinted;i<currentLine;i++) { out.println(); } if (lastLinePrinted > currentLine) { out.println(); } if (visit == OPENING_VISIT || (visit == CLOSING_VISIT && lastLinePrinted > currentLine)) { for (int i=0;i<tabLevel;i++) { out.print(" "); } } } } lastLinePrinted = Math.max(currentLine,lastLinePrinted); } } public void push(GroovySourceAST t) { stack.push(t); } public GroovySourceAST pop() { if (!stack.empty()) { return (GroovySourceAST) stack.pop(); } return null; } private GroovySourceAST getParentNode() { Object currentNode = stack.pop(); Object parentNode = stack.peek(); stack.push(currentNode); return (GroovySourceAST) parentNode; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -