static Value parse()

in dataenum-processor/src/main/java/com/spotify/dataenum/processor/parser/ValueParser.java [48:93]


  static Value parse(Element element, ProcessingContext ctx) {
    Messager messager = ctx.env.getMessager();

    ExecutableElement methodElement = (ExecutableElement) element;

    if (methodElement.getTypeParameters().size() != 0) {
      messager.printMessage(
          Diagnostic.Kind.ERROR,
          String.format(
              "Type parameters must be specified on the top-level interface, found: %s", element),
          element);
      return null;
    }

    if (methodElement.isVarArgs()) {
      messager.printMessage(
          Diagnostic.Kind.ERROR,
          String.format("Vararg parameters not permitted: %s", element),
          element);
      return null;
    }

    List<Parameter> parameters = new ArrayList<>();
    for (VariableElement parameterElement : methodElement.getParameters()) {
      String parameterName = parameterElement.getSimpleName().toString();
      TypeName parameterType = TypeName.get(parameterElement.asType());

      boolean nullable = isAnnotationPresent(parameterElement, ValueParser::isNullableAnnotation);
      boolean redacted = isAnnotationPresent(parameterElement, ValueParser::isRedactedAnnotation);
      Element parameterTypeElement = ctx.env.getTypeUtils().asElement(parameterElement.asType());
      boolean isEnum =
          parameterTypeElement != null && parameterTypeElement.getKind() == ElementKind.ENUM;

      parameters.add(new Parameter(parameterName, parameterType, nullable, redacted, isEnum));
    }

    String javadoc = ctx.env.getElementUtils().getDocComment(element);

    if (javadoc != null) {
      javadoc = javadoc.trim();
    }

    String valueSimpleName = methodElement.getSimpleName().toString();
    return new Value(
        valueSimpleName, javadoc, parameters, parseMethodAnnotations(methodElement, messager));
  }