@Override public JavaWriter annotation(Class<? extends Annotation> annotation) throws IOException { return beginLine().append("@").appendType(annotation).nl(); }
@SuppressWarnings("unchecked") private void annotationConstant(Object value) throws IOException { if (value.getClass().isArray()) { append("{"); boolean first = true; for (Object o : (Object[]) value) { if (!first) { append(", "); append("}"); } else if (value instanceof Class) { appendType((Class) value).append(".class"); } else if (value instanceof Number || value instanceof Boolean) { append(value.toString()); } else if (value instanceof Enum) { Enum<?> enumValue = (Enum<?>) value; if (classes.contains(enumValue.getClass().getName()) || packages.contains(enumValue.getClass().getPackage().getName())) { append(enumValue.name()); } else { append(enumValue.getDeclaringClass().getName()).append(DOT).append(enumValue.name()); append(QUOTE).append(escaped.replace("\\/", "/")).append(QUOTE); } else { throw new IllegalArgumentException("Unsupported annotation value : " + value);
@Override public JavaWriter annotation(Annotation annotation) throws IOException { beginLine().append("@").appendType(annotation.annotationType()); Method[] methods = annotation.annotationType().getDeclaredMethods(); if (methods.length == 1 && methods[0].getName().equals("value")) { try { Object value = methods[0].invoke(annotation); append("("); annotationConstant(value); append(")"); } catch (IllegalArgumentException e) { throw new CodegenException(e); continue; } else if (!first) { append(COMMA); } else { append("("); append(method.getName()).append("="); annotationConstant(value); } catch (IllegalArgumentException e) { append(")");
@Override public JavaWriter beginClass(Type type, Type superClass, Type... interfaces) throws IOException { packages.add(type.getPackageName()); beginLine(PUBLIC_CLASS, type.getGenericName(false, packages, classes)); if (superClass != null) { append(EXTENDS).append(superClass.getGenericName(false, packages, classes)); } if (interfaces.length > 0) { append(IMPLEMENTS); for (int i = 0; i < interfaces.length; i++) { if (i > 0) { append(COMMA); } append(interfaces[i].getGenericName(false, packages, classes)); } } append(" {").nl().nl(); goIn(); types.push(type); return this; }
@Override public JavaWriter beginInterface(Type type, Type... interfaces) throws IOException { packages.add(type.getPackageName()); beginLine(PUBLIC_INTERFACE, type.getGenericName(false, packages, classes)); if (interfaces.length > 0) { append(EXTENDS); for (int i = 0; i < interfaces.length; i++) { if (i > 0) { append(COMMA); } append(interfaces[i].getGenericName(false, packages, classes)); } } append(" {").nl().nl(); goIn(); types.push(type); return this; }
@Override public JavaWriter beginConstructor(Parameter... parameters) throws IOException { types.push(types.peek()); beginLine(PUBLIC, types.peek().getSimpleName()).params(parameters).append(" {").nl(); return goIn(); }
@Override public <T> JavaWriter beginConstructor(Collection<T> parameters, Function<T, Parameter> transformer) throws IOException { types.push(types.peek()); beginLine(PUBLIC, types.peek().getSimpleName()).params(parameters, transformer) .append(" {").nl(); return goIn(); }
private JavaWriter beginMethod(String modifiers, Type returnType, String methodName, Parameter... args) throws IOException { types.push(types.peek()); beginLine( modifiers, returnType.getGenericName(true, packages, classes), SPACE, methodName) .params(args).append(" {").nl(); return goIn(); }
javaw.append(source); javaw.end(); javaw.end();