in dataenum-processor/src/main/java/com/spotify/dataenum/processor/parser/SpecParser.java [44:76]
public static Spec parse(Element element, ProcessingContext ctx) {
Messager messager = ctx.env.getMessager();
if (element.getKind() != ElementKind.INTERFACE) {
messager.printMessage(
Diagnostic.Kind.ERROR, "@DataEnum can only be used on interfaces.", element);
return null;
}
TypeElement dataEnum = (TypeElement) element;
List<TypeVariableName> typeVariableNames = new ArrayList<>();
for (TypeParameterElement typeParameterElement : dataEnum.getTypeParameters()) {
typeVariableNames.add(TypeVariableName.get(typeParameterElement));
}
final Pair<List<Value>, List<MethodSpec>> valuesAndMethods = MembersParser.parse(dataEnum, ctx);
if (valuesAndMethods == null) {
return null;
}
List<ClassName> interfaces =
dataEnum
.getInterfaces()
.stream()
.map(x -> ClassName.get((TypeElement) ((DeclaredType) x).asElement()))
.collect(Collectors.toList());
ClassName enumInterface = ClassName.get(dataEnum);
return new Spec(
enumInterface, typeVariableNames, interfaces, valuesAndMethods.fst, valuesAndMethods.snd);
}