@Override
public final void saveIn(Path directory) {
try {
final String targetsLiteral = this.targets
.map(ElementType::name)
.collect(Collectors.joining(", ", "{", "}"));
final AnnotationSpec retention = AnnotationSpec.builder(Retention.class)
.addMember("value", "$L", this.retentionPolicy)
.build();
final AnnotationSpec target = AnnotationSpec.builder(Target.class)
.addMember("value", "$L", targetsLiteral)
.build();
final TypeSpec typeSpec = TypeSpec.annotationBuilder(className)
.addModifiers(Modifier.PUBLIC)
.addAnnotation(retention)
.addAnnotation(target)
.build();
JavaFile.builder(packageName, typeSpec)
.addStaticImport(RetentionPolicy.class, retentionPolicy.name())
.addStaticImport(ElementType.class, "*")
.build().writeTo(directory);
} catch(Exception ex) {
throw new RuntimeException(ex);
}
}
}