use of com.github.jknack.handlebars.io.URLTemplateSource in project feign by OpenFeign.
the class GenerateTestStubAPT method process.
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
System.out.println(annotations);
System.out.println(roundEnv);
final Map<TypeElement, List<ExecutableElement>> clientsToGenerate = annotations.stream().map(roundEnv::getElementsAnnotatedWith).flatMap(Set::stream).map(ExecutableElement.class::cast).collect(Collectors.toMap(annotatedMethod -> TypeElement.class.cast(annotatedMethod.getEnclosingElement()), ImmutableList::of, (list1, list2) -> ImmutableList.<ExecutableElement>builder().addAll(list1).addAll(list2).build()));
System.out.println("Count: " + clientsToGenerate.size());
System.out.println("clientsToGenerate: " + clientsToGenerate);
final Handlebars handlebars = new Handlebars();
final URLTemplateSource source = new URLTemplateSource("stub.mustache", getClass().getResource("/stub.mustache"));
Template template;
try {
template = handlebars.with(EscapingStrategy.JS).compile(source);
} catch (final IOException e) {
throw new IOError(e);
}
clientsToGenerate.forEach((type, executables) -> {
try {
final String jPackage = readPackage(type);
final String className = type.getSimpleName().toString();
final JavaFileObject builderFile = processingEnv.getFiler().createSourceFile(jPackage + "." + className + "Stub");
final ClientDefinition client = new ClientDefinition(jPackage, className, type.toString());
final List<MethodDefinition> methods = executables.stream().map(method -> {
final String methodName = method.getSimpleName().toString();
final List<ArgumentDefinition> args = method.getParameters().stream().map(var -> new ArgumentDefinition(var.getSimpleName().toString(), var.asType().toString())).collect(Collectors.toList());
return new MethodDefinition(methodName, method.getReturnType().toString(), method.getReturnType().getKind() == TypeKind.VOID, args);
}).collect(Collectors.toList());
final Context context = Context.newBuilder(template).combine("client", client).combine("methods", methods).resolver(JavaBeanValueResolver.INSTANCE, MapValueResolver.INSTANCE, FieldValueResolver.INSTANCE).build();
final String stubSource = template.apply(context);
System.out.println(stubSource);
builderFile.openWriter().append(stubSource).close();
} catch (final Exception e) {
e.printStackTrace();
processingEnv.getMessager().printMessage(Kind.ERROR, "Unable to generate factory for " + type);
}
});
return true;
}
Aggregations