Получить свойства перечисления в процессоре аннотаций - PullRequest
0 голосов
/ 03 октября 2018

Я хочу сгенерировать объект 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);
}

}
...