public static Spec parse()

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);
  }