@Override public <A extends Annotation> void visitCtAnnotationType(CtAnnotationType<A> annotationType) { visitCtType(annotationType); printer.writeSeparator("@").writeKeyword("interface") .writeSpace().writeIdentifier(annotationType.getSimpleName()) .writeSpace().writeSeparator("{").incTab(); elementPrinterHelper.writeElementList(annotationType.getTypeMembers()); printer.decTab().writeSeparator("}"); }
@Override public DirectPrinterHelper getPrinterHelper() { return (DirectPrinterHelper) delegate.getPrinterHelper(); } @Override
@Override public void reset() { delegate.reset(); }
public void writePackageLine(String packageQualifiedName) { printer.writeKeyword("package").writeSpace(); writeQualifiedName(packageQualifiedName).writeSeparator(";").writeln(); }
/** * splits qualified name to primitive tokens and sends them to TokenWriter individually * @param qualifiedName to be sent qualified name */ public TokenWriter writeQualifiedName(String qualifiedName) { StringTokenizer st = new StringTokenizer(qualifiedName, QUALIFIED_NAME_SEPARATORS, true); while (st.hasMoreTokens()) { String token = st.nextToken(); if (token.length() == 1 && QUALIFIED_NAME_SEPARATORS.indexOf(token.charAt(0)) >= 0) { printer.writeSeparator(token); } else { printer.writeIdentifier(token); } } return printer; }
@Override public void visitCtDo(CtDo doLoop) { enterCtStatement(doLoop); printer.writeKeyword("do"); elementPrinterHelper.writeIfOrLoopBlock(doLoop.getBody()); printer.writeKeyword("while").writeSpace().writeSeparator("("); scan(doLoop.getLoopingExpression()); printer.writeSpace().writeSeparator(")"); exitCtStatement(doLoop); }
@Override public <T, E extends CtExpression<?>> void visitCtExecutableReferenceExpression(CtExecutableReferenceExpression<T, E> expression) { enterCtExpression(expression); try (Writable _context = context.modify()) { if (expression.getExecutable().isStatic()) { _context.ignoreGenerics(true); } scan(expression.getTarget()); } printer.writeSeparator("::"); if (expression.getExecutable().isConstructor()) { printer.writeKeyword("new"); } else { printer.writeIdentifier(expression.getExecutable().getSimpleName()); } exitCtExpression(expression); }
public void writeExtendsClause(CtType<?> type) { if (type.getSuperclass() != null) { printer.writeSpace().writeKeyword("extends").writeSpace(); prettyPrinter.scan(type.getSuperclass()); } }
@Override public <A extends Annotation> void visitCtAnnotation(CtAnnotation<A> annotation) { elementPrinterHelper.writeAnnotations(annotation); printer.writeSeparator("@"); scan(annotation.getAnnotationType()); if (!annotation.getValues().isEmpty()) { elementPrinterHelper.printList(annotation.getValues().entrySet(), null, false, "(", false, false, ",", true, false, ")", e -> { if ((annotation.getValues().size() == 1 && "value".equals(e.getKey())) == false) { //it is not a default value attribute. We must print a attribute name too. printer.writeIdentifier(e.getKey()).writeSpace().writeOperator("=").writeSpace(); } elementPrinterHelper.writeAnnotationElement(annotation.getFactory(), e.getValue()); }); } }
/** * Enters a statement. */ protected void enterCtStatement(CtStatement s) { elementPrinterHelper.writeComment(s, CommentOffset.BEFORE); getPrinterHelper().mapLine(s, sourceCompilationUnit); if (!context.isNextForVariable()) { //TODO AnnotationLoopTest#testAnnotationDeclaredInForInit expects that annotations of next for variables are not printed //but may be correct is that the next variables are not annotated, because they might have different annotation then first param! elementPrinterHelper.writeAnnotations(s); } if (!context.isFirstForVariable() && !context.isNextForVariable()) { if (s.getLabel() != null) { printer.writeIdentifier(s.getLabel()).writeSpace().writeSeparator(":").writeSpace(); } } }
if (value instanceof CtTypeAccess) { prettyPrinter.scan((CtTypeAccess) value); printer.writeSeparator(".").writeKeyword("class"); } else if (value instanceof CtFieldReference) { prettyPrinter.scan(((CtFieldReference<?>) value).getDeclaringType()); printer.writeSeparator(".").writeIdentifier(((CtFieldReference<?>) value).getSimpleName()); } else if (value instanceof CtElement) { prettyPrinter.scan((CtElement) value); } else if (value instanceof String) { printer.writeLiteral("\"" + LiteralHelper.getStringLiteral((String) value, true) + "\""); } else if (value instanceof Collection) { printList((Collection<?>) value, null, prettyPrinter.scan(factory.Type().createReference(((Enum<?>) value).getDeclaringClass())); printer.writeSeparator("."); printer.writeIdentifier(value.toString()); } else { printer.writeLiteral(value.toString());
@Override public <T> void visitCtLocalVariable(CtLocalVariable<T> localVariable) { enterCtStatement(localVariable); if (env.isPreserveLineNumbers()) { getPrinterHelper().adjustStartPosition(localVariable); } if (!context.isNextForVariable()) { elementPrinterHelper.writeModifiers(localVariable); if (localVariable.isInferred() && this.env.getComplianceLevel() >= 10) { getPrinterTokenWriter().writeKeyword("var"); } else { scan(localVariable.getType()); } printer.writeSpace(); } printer.writeIdentifier(localVariable.getSimpleName()); if (localVariable.getDefaultExpression() != null) { printer.writeSpace().writeOperator("=").writeSpace(); scan(localVariable.getDefaultExpression()); } exitCtStatement(localVariable); }
@Override public void visitCtContinue(CtContinue continueStatement) { enterCtStatement(continueStatement); printer.writeKeyword("continue"); if (continueStatement.getTargetLabel() != null) { printer.writeSpace().writeIdentifier(continueStatement.getTargetLabel()); } exitCtStatement(continueStatement); }
printer.writeSeparator("("); printer.writeSeparator(")"); printer.writeSpace().writeOperator("?").writeSpace(); CtExpression<T> thenExpression = conditional.getThenExpression(); scan(thenExpression); printer.writeSpace().writeOperator(":").writeSpace(); printer.writeSeparator("("); printer.writeSeparator(")");
@Override public <T, A extends T> void visitCtAssignment(CtAssignment<T, A> assignement) { enterCtStatement(assignement); enterCtExpression(assignement); scan(assignement.getAssigned()); printer.writeSpace().writeOperator("=").writeSpace(); scan(assignement.getAssignment()); exitCtExpression(assignement); exitCtStatement(assignement); }
@Override public TokenWriter writeIdentifier(String token) { this.listener.onTokenWriterWrite(TokenType.IDENTIFIER, token, null, () -> delegate.writeIdentifier(token)); return this; }
printer.writeComment(f.getFactory().createComment("ERROR: Missing field \"" + f.getVariable().getSimpleName() + "\", please check your model. The code may not compile.", CommentType.BLOCK)).writeSpace(); printer.writeSeparator(".");
@Override public <T> void visitCtCatchVariable(CtCatchVariable<T> catchVariable) { if (env.isPreserveLineNumbers()) { getPrinterHelper().adjustStartPosition(catchVariable); } elementPrinterHelper.writeModifiers(catchVariable); scan(catchVariable.getType()); printer.writeSpace(); printer.writeIdentifier(catchVariable.getSimpleName()); }
@Override public void visitCtPackage(CtPackage ctPackage) { if (!ctPackage.isUnnamedPackage()) { elementPrinterHelper.writePackageLine(ctPackage.getQualifiedName()); } else { printer.writeComment( ctPackage.getFactory().createComment("default package (CtPackage.TOP_LEVEL_PACKAGE_NAME in Spoon= unnamed package)", CommentType.INLINE) ).writeln(); } }
@Override public <T> void visitCtSuperAccess(CtSuperAccess<T> f) { enterCtExpression(f); if (f.getTarget() != null) { scan(f.getTarget()); printer.writeSeparator("."); } printer.writeKeyword("super"); exitCtExpression(f); }