Lortseam 4 tahun lalu
induk
melakukan
5d463a4a2e

+ 0 - 1
lib/src/main/java/me/lortseam/completeconfig/data/BooleanEntry.java

@@ -1,7 +1,6 @@
 package me.lortseam.completeconfig.data;
 
 import me.lortseam.completeconfig.api.ConfigEntry;
-import me.lortseam.completeconfig.data.entry.AnnotatedEntryOrigin;
 import me.lortseam.completeconfig.data.entry.EntryOrigin;
 import me.lortseam.completeconfig.data.text.TranslationIdentifier;
 import net.minecraft.text.Text;

+ 0 - 1
lib/src/main/java/me/lortseam/completeconfig/data/ColorEntry.java

@@ -2,7 +2,6 @@ package me.lortseam.completeconfig.data;
 
 import lombok.Getter;
 import me.lortseam.completeconfig.api.ConfigEntry;
-import me.lortseam.completeconfig.data.entry.AnnotatedEntryOrigin;
 import me.lortseam.completeconfig.data.entry.EntryOrigin;
 
 public class ColorEntry<T> extends Entry<T> {

+ 1 - 1
lib/src/main/java/me/lortseam/completeconfig/data/Entry.java

@@ -238,7 +238,7 @@ public class Entry<T> extends EntryBase<T> implements DataPart {
 
     }
 
-    static class Draft<T> extends EntryBase<T> {
+    public static class Draft<T> extends EntryBase<T> {
 
         static <T> Draft<T> of(Field field, Class<? extends ConfigContainer> parentClass) {
             EntryBase<T> accessor = (EntryBase<T>) Entry.of(field, parentClass);

+ 0 - 20
lib/src/main/java/me/lortseam/completeconfig/data/entry/AnnotatedEntryOrigin.java

@@ -1,20 +0,0 @@
-package me.lortseam.completeconfig.data.entry;
-
-import lombok.Getter;
-import me.lortseam.completeconfig.api.ConfigContainer;
-import me.lortseam.completeconfig.data.text.TranslationIdentifier;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Field;
-
-public class AnnotatedEntryOrigin<A extends Annotation> extends EntryOrigin {
-
-    @Getter
-    private final A annotation;
-
-    AnnotatedEntryOrigin(Field field, ConfigContainer parentObject, TranslationIdentifier parentTranslation, Class<A> annotationType) {
-        super(field, parentObject, parentTranslation);
-        annotation = field.getAnnotation(annotationType);
-    }
-
-}

+ 5 - 6
lib/src/main/java/me/lortseam/completeconfig/data/entry/EntryOrigin.java

@@ -8,10 +8,9 @@ import me.lortseam.completeconfig.data.text.TranslationIdentifier;
 
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Field;
-import java.util.Optional;
 
 @RequiredArgsConstructor(access = AccessLevel.PACKAGE)
-public class EntryOrigin {
+public final class EntryOrigin {
 
     @Getter
     protected final Field field;
@@ -20,11 +19,11 @@ public class EntryOrigin {
     @Getter
     private final TranslationIdentifier parentTranslation;
 
-    public <A extends Annotation> Optional<A> getAnnotation(Class<A> annotationType) {
-        if (field.isAnnotationPresent(annotationType)) {
-            return Optional.of(field.getAnnotation(annotationType));
+    public <A extends Annotation> A getAnnotation(Class<A> annotationType) {
+        if (!field.isAnnotationPresent(annotationType)) {
+            throw new IllegalArgumentException("Annotation " + annotationType + " is not present");
         }
-        return Optional.empty();
+        return field.getAnnotation(annotationType);
     }
 
 }

+ 43 - 30
lib/src/main/java/me/lortseam/completeconfig/data/entry/Transformation.java

@@ -1,6 +1,8 @@
 package me.lortseam.completeconfig.data.entry;
 
 import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import lombok.NonNull;
 import lombok.RequiredArgsConstructor;
 import me.lortseam.completeconfig.api.ConfigContainer;
 import me.lortseam.completeconfig.data.Entry;
@@ -11,44 +13,38 @@ import org.apache.commons.lang3.ArrayUtils;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Field;
 import java.lang.reflect.Type;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.function.Consumer;
 import java.util.function.Predicate;
 
 @RequiredArgsConstructor(access = AccessLevel.PRIVATE)
-public final class Transformation<O extends EntryOrigin> {
+public final class Transformation {
 
-    public static Transformation.Builder<EntryOrigin> by(Predicate<EntryBase<?>> predicate) {
-        return new Transformation.Builder<>(EntryOrigin::new).and(predicate);
-    }
-
-    public static Transformation.Builder<EntryOrigin> byType(Type... types) {
-        return new Transformation.Builder<>(EntryOrigin::new).andType(types);
-    }
+    private static final Set<Class<Annotation>> registeredAnnotations = new HashSet<>();
 
-    public static <A extends Annotation> Transformation.Builder<AnnotatedEntryOrigin<A>> byAnnotation(Class<A> annotationType) {
-        return new Transformation.Builder<>((field, parentObject, parentTranslation) -> {
-            return new AnnotatedEntryOrigin<>(field, parentObject, parentTranslation, annotationType);
-        }).and(base -> base.getField().isAnnotationPresent(annotationType));
+    public static Transformation.Builder builder() {
+        return new Transformation.Builder();
     }
 
-    private final Predicate<EntryBase<?>> predicate;
-    private final OriginCreator<O> originCreator;
-    private final Transformer<O> transformer;
+    private final Predicate<Entry.Draft<?>> predicate;
+    private final Transformer transformer;
 
-    public boolean test(EntryBase<?> base) {
+    public boolean test(Entry.Draft<?> base) {
         return predicate.test(base);
     }
 
-    public Entry<?> transform(EntryBase<?> base, ConfigContainer parentObject, TranslationIdentifier parentTranslation) {
-        return transformer.transform(originCreator.create(base.getField(), parentObject, parentTranslation));
+    public Entry<?> transform(Entry.Draft<?> draft, ConfigContainer parentObject, TranslationIdentifier parentTranslation) {
+        return transformer.transform(originCreator.create(draft.getField(), parentObject, parentTranslation));
     }
 
-    @RequiredArgsConstructor(access = AccessLevel.PRIVATE)
-    public static class Builder<O extends EntryOrigin> {
+    @NoArgsConstructor(access = AccessLevel.PRIVATE)
+    public static class Builder {
 
-        private final OriginCreator<O> originCreator;
-        private Predicate<EntryBase<?>> predicate;
+        private Predicate<Entry.Draft<?>> predicate;
 
-        public Builder<O> and(Predicate<EntryBase<?>> predicate) {
+        private Builder by(Predicate<Entry.Draft<?>> predicate) {
             if (this.predicate == null) {
                 this.predicate = predicate;
             } else {
@@ -57,15 +53,32 @@ public final class Transformation<O extends EntryOrigin> {
             return this;
         }
 
-        public Builder<O> andType(Type... types) {
-            if (types.length == 0) {
-                throw new IllegalArgumentException("Types must not be empty");
-            }
-            return and(base -> ArrayUtils.contains(types, base.getType()));
+        public Builder byType(Type... types) {
+            return byType(type -> ArrayUtils.contains(types, type));
+        }
+
+        public Builder byTypeClass(Predicate<Class<?>> typeClassPredicate) {
+            return by(draft -> typeClassPredicate.test(draft.getTypeClass()));
+        }
+
+        public Builder byType(Predicate<Type> typePredicate) {
+            return by(draft -> typePredicate.test(draft.getType()));
+        }
+
+        public Builder byAnnotation(Class<Annotation>... annotations) {
+            registeredAnnotations.addAll(Arrays.asList(annotations));
+            return by(draft -> {
+                for (Class<Annotation> annotationType : annotations) {
+                    if (!draft.getField().isAnnotationPresent(annotationType)) {
+                        return false;
+                    }
+                }
+                return true;
+            });
         }
 
-        public Transformation<O> transforms(Transformer<O> transformer) {
-            return new Transformation<>(predicate, originCreator, transformer);
+        public Transformation transforms(Transformer transformer) {
+            return new Transformation(predicate, transformer);
         }
 
     }

+ 2 - 2
lib/src/main/java/me/lortseam/completeconfig/data/entry/Transformer.java

@@ -3,8 +3,8 @@ package me.lortseam.completeconfig.data.entry;
 import me.lortseam.completeconfig.data.Entry;
 
 @FunctionalInterface
-public interface Transformer<O extends EntryOrigin> {
+public interface Transformer {
 
-    Entry<?> transform(O origin);
+    Entry<?> transform(EntryOrigin origin);
 
 }