Я хочу сгенерировать объект Javascript для каждого из моих JAVA-перечислений с их свойствами.
Например, для этого перечисления:
@AllArgsConstructor
public enum ETypeModel {
TYPE_I("Type modèle 1", 10),
TYPE_II("Type modèle 2", 20);
@Getter private String label;
@Getter private int priority;
}
Я бы хотел сгенерировать файл JS, аналогичныйto:
const ETypeModel = {
TYPE_I : {label: 'Type modèle 1', priority: 10},
TYPE_II: {label: 'Type modèle 2', priority: 20}
};
Итак, я создал процессор аннотаций, сейчас я могу перечислить значения перечисления (TYPE_I и TYPE_II), но я не знаю, как получить свойства для каждого значения (метка и приоритет).
Мой текущий процессор:
@SupportedAnnotationTypes({"fr.mistic.TsExportable"})
public class TsExportableProcessor extends AbstractProcessor {
@Override
public boolean process(final Set<? extends TypeElement> annotations, final RoundEnvironment roundEnvironment) {
if (!roundEnvironment.processingOver()) {
for (final Element element : roundEnvironment.getElementsAnnotatedWith(TsExportable.class)) {
handleElement(element);
}
}
return false;
}
void handleElement(final Element element) {
if (ElementKind.ENUM.equals(element.getKind())) {
handleEnum(element);
}
}
void handleEnum(final Element element) {
List<Element> values = element.getEnclosedElements()
.stream()
.filter(e -> e.getKind().equals(ElementKind.ENUM_CONSTANT))
.collect(Collectors.toList());
log(element.getSimpleName().toString()); // Prints ETypeModel
values.forEach(e -> {
log(e.toString()); // Prints TYPE_I and TYPE_II
});
}
void log(String str) {
processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, str);
}
}