private void appendLiteral(float value) { if (value == Float.NEGATIVE_INFINITY) { appendConstant(Float.class, CONSTANT_NEGATIVE_INFINITY); } else if (value == Float.POSITIVE_INFINITY) { appendConstant(Float.class, CONSTANT_POSITIVE_INFINITY); } else if (value == Float.MAX_VALUE) { appendConstant(Float.class, CONSTANT_MAX_VALUE); } else if (value == Float.MIN_VALUE) { appendConstant(Float.class, CONSTANT_MIN_VALUE); } else if (Float.isNaN(value)) { appendConstant(Float.class, CONSTANT_NAN); } else { builder.append(Float.toString(value)); } }
@Override public Void visitAnnotation(AnnotationMirror a, Void p) { builder.append('@').append(a.getAnnotationType()); Map<? extends ExecutableElement, ? extends AnnotationValue> values = a.getElementValues(); if (!values.isEmpty()) { builder.append('('); boolean notFirst = false; for (Entry<? extends ExecutableElement, ? extends AnnotationValue> e : values.entrySet()) { if (notFirst) { builder.append(", "); } notFirst = true; Name name = e.getKey().getSimpleName(); boolean onlyValue = values.size() == 1 && name.contentEquals(ATTRIBUTE_VALUE); if (!onlyValue) { builder.append(name).append(" = "); } printValue(e.getValue()); } builder.append(')'); } return null; }
@Override public Void visitArray(List<? extends AnnotationValue> vals, Void p) { if (vals.size() == 1) { visitValue(vals.get(0)); return null; } builder.append('{'); boolean notFirst = false; for (AnnotationValue v : vals) { if (notFirst) { builder.append(", "); } notFirst = true; visitValue(v); } builder.append('}'); return null; }
private void appendLiteral(double value) { if (value == Double.NEGATIVE_INFINITY) { appendConstant(Double.class, CONSTANT_NEGATIVE_INFINITY); } else if (value == Double.POSITIVE_INFINITY) { appendConstant(Double.class, CONSTANT_POSITIVE_INFINITY); } else if (value == Double.MAX_VALUE) { appendConstant(Double.class, CONSTANT_MAX_VALUE); } else if (value == Double.MIN_VALUE) { appendConstant(Double.class, CONSTANT_MIN_VALUE); } else if (Double.isNaN(value)) { appendConstant(Double.class, CONSTANT_NAN); } else { builder.append(Double.toString(value)); } }
private void appendLiteral(byte value) { if (value == Byte.MAX_VALUE) { appendConstant(Byte.class, CONSTANT_MAX_VALUE); } else if (value == Byte.MIN_VALUE) { appendConstant(Byte.class, CONSTANT_MIN_VALUE); } else { builder.append(Integer.toHexString(value)); } } }
@Override public Void visitShort(short s, Void p) { appendLiteral(s); return null; }
@Override public Void visitLong(long l, Void p) { appendLiteral(l); return null; }
private void appendLiteral(int value) { if (value == Integer.MAX_VALUE) { appendConstant(Integer.class, CONSTANT_MAX_VALUE); } else if (value == Integer.MIN_VALUE) { appendConstant(Integer.class, CONSTANT_MIN_VALUE); } else { builder.append(Integer.toString(value)); } }
@Override public Void visitByte(byte b, Void p) { appendLiteral(b); return null; }
@Override public Void visitFloat(float f, Void p) { appendLiteral(f); return null; }
@Override public Void visitInt(int i, Void p) { appendLiteral(i); return null; }
private void appendLiteral(short value) { if (value == Short.MAX_VALUE) { appendConstant(Short.class, CONSTANT_MAX_VALUE); } else if (value == Integer.MIN_VALUE) { appendConstant(Short.class, CONSTANT_MIN_VALUE); } else { builder.append(Short.toString(value)); } }
public static CharSequence toCharSequence(AnnotationMirror value) { PrintVisitor printer = new PrintVisitor(); printer.visitAnnotation(value, null); return printer.builder; }
public static CharSequence toCharSequence(AnnotationValue value) { PrintVisitor printer = new PrintVisitor(); printer.visit(value, null); return printer.builder; }
private void appendLiteral(long value) { if (value == Long.MAX_VALUE) { appendConstant(Long.class, CONSTANT_MAX_VALUE); } else if (value == Long.MIN_VALUE) { appendConstant(Long.class, CONSTANT_MIN_VALUE); } else { builder.append(Long.toString(value)); } }
private void printValue(AnnotationValue value) { // doing string comparison here because this class may not be available in Javac JDK7 if (Compiler.JAVAC.isPresent() && "com.sun.tools.javac.code.Attribute.UnresolvedClass".equals(value.getClass().getCanonicalName())) { Attribute.UnresolvedClass unresolved = ((Attribute.UnresolvedClass) value); String typeString = unresolved.classType.tsym.name.toString(); builder.append(unresovedImportsResolver.apply(typeString)).append(".class"); } else { visitValue(value); } }
@Override public Void visitDouble(double d, Void p) { appendLiteral(d); return null; }
public static CharSequence toCharSequence( AnnotationMirror value, Function<String, String> unresovedImportsResolver) { PrintVisitor printer = new PrintVisitor(unresovedImportsResolver); printer.visitAnnotation(value, null); return printer.builder; }