All Downloads are FREE. Search and download functionalities are using the official Maven repository.

eu.toolchain.serializer.processor.annotation.AutoSerializeMirror Maven / Gradle / Ivy

The newest version!
package eu.toolchain.serializer.processor.annotation;

import eu.toolchain.serializer.processor.AutoSerializeUtils;
import java.util.Optional;
import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.Element;
import lombok.Data;

@Data
public class AutoSerializeMirror {
  private final AnnotationMirror annotation;

  private final String name;
  private final boolean useGetter;
  private final boolean fieldBased;
  private final boolean failOnMissing;
  private final Optional builder;
  private final boolean orderById;
  private final boolean orderConstructorById;

  public static AutoSerializeMirror getFor(
    final AutoSerializeUtils utils, final Element element, final AnnotationMirror a
  ) {
    final AnnotationValues values = utils.getElementValuesWithDefaults(element, a);

    final String name = values.getString("name").get();
    final boolean useGetter = values.getBoolean("useGetter").get();
    final boolean fieldBased = values.getBoolean("fieldBased").get();
    final boolean failOnMissing = values.getBoolean("failOnMissing").get();
    final boolean orderById = values.getBoolean("orderById").get();
    final boolean orderConstructorById = values.getBoolean("orderConstructorById").get();

    final Optional builder = makeBuilder(utils, element, values);

    return new AutoSerializeMirror(a, name, useGetter, fieldBased, failOnMissing, builder,
      orderById, orderConstructorById);
  }

  private static Optional makeBuilder(
    final AutoSerializeUtils utils, final Element element, final AnnotationValues values
  ) {
    return utils.builder(element).map(Optional::of).orElseGet(() -> {
      for (final AnnotationMirror builderMirror : values.getAnnotationValue("builder").get()) {
        return Optional.of(BuilderMirror.getFor(utils, element, builderMirror));
      }

      return Optional.empty();
    });
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy