EntryOrigin.java 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package me.lortseam.completeconfig.data;
  2. import lombok.AccessLevel;
  3. import lombok.EqualsAndHashCode;
  4. import lombok.Getter;
  5. import lombok.RequiredArgsConstructor;
  6. import me.lortseam.completeconfig.api.ConfigContainer;
  7. import me.lortseam.completeconfig.util.ReflectionUtils;
  8. import java.lang.annotation.Annotation;
  9. import java.lang.reflect.Field;
  10. import java.lang.reflect.Type;
  11. import java.util.Optional;
  12. @RequiredArgsConstructor(access = AccessLevel.PACKAGE)
  13. @EqualsAndHashCode(onlyExplicitlyIncluded = true)
  14. public final class EntryOrigin {
  15. @Getter
  16. private final BaseCollection parent;
  17. @Getter
  18. @EqualsAndHashCode.Include
  19. protected final Field field;
  20. @Getter
  21. @EqualsAndHashCode.Include
  22. private final ConfigContainer object;
  23. public Type getType() {
  24. return ReflectionUtils.getFieldType(field);
  25. }
  26. public <A extends Annotation> A getAnnotation(Class<A> annotationType) {
  27. A annotation = field.getDeclaredAnnotation(annotationType);
  28. if (annotation == null) {
  29. throw new IllegalStateException("Missing required transformation annotation: " + annotationType);
  30. }
  31. return annotation;
  32. }
  33. public boolean isAnnotationPresent(Class<? extends Annotation> annotationType) {
  34. return field.isAnnotationPresent(annotationType);
  35. }
  36. public <A extends Annotation> Optional<A> getOptionalAnnotation(Class<A> annotationType) {
  37. return Optional.ofNullable(field.getDeclaredAnnotation(annotationType));
  38. }
  39. }