Kaynağa Gözat

Code improvement

Lortseam 4 yıl önce
ebeveyn
işleme
d412b03dc3

+ 4 - 2
lib/src/main/java/me/lortseam/completeconfig/CompleteConfig.java

@@ -16,6 +16,8 @@ import org.apache.commons.lang3.ClassUtils;
 
 import java.lang.reflect.InvocationTargetException;
 import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 @Log4j2
 @UtilityClass
@@ -65,8 +67,8 @@ public final class CompleteConfig {
         registerExtension(extensionType);
     }
 
-    public static Collection<Extension> getExtensions() {
-        return Collections.unmodifiableCollection(extensions);
+    public static <E extends Extension, T> Collection<T> collectExtensions(Class<E> extensionType, Function<E, T> function) {
+        return extensions.stream().filter(extensionType::isInstance).map(extension -> function.apply((E) extension)).filter(Objects::nonNull).collect(Collectors.toSet());
     }
 
 }

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

@@ -26,6 +26,7 @@ import org.spongepowered.configurate.serialize.SerializationException;
 import java.beans.IntrospectionException;
 import java.lang.reflect.*;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.List;
 import java.util.Objects;
 import java.util.Optional;
@@ -68,11 +69,9 @@ public class Entry<T> implements DataPart, Identifiable {
     );
 
     static {
-        CompleteConfig.getExtensions().stream().filter(extension -> {
-            return extension instanceof CompleteConfigExtension;
-        }).map(extension -> {
-            return ((CompleteConfigExtension) extension).getTransformations();
-        }).filter(Objects::nonNull).forEach(transformations::addAll);
+        for (Collection<Transformation> transformations : CompleteConfig.collectExtensions(CompleteConfigExtension.class, CompleteConfigExtension::getTransformations)) {
+            Entry.transformations.addAll(transformations);
+        }
     }
 
     static Entry<?> of(Field field, ConfigContainer parentObject, TranslationIdentifier parentTranslation) {

+ 10 - 8
lib/src/main/java/me/lortseam/completeconfig/gui/cloth/GuiRegistry.java

@@ -1,5 +1,6 @@
 package me.lortseam.completeconfig.gui.cloth;
 
+import com.google.common.collect.Lists;
 import com.google.common.collect.MoreCollectors;
 import com.google.common.reflect.TypeToken;
 import me.lortseam.completeconfig.CompleteConfig;
@@ -11,15 +12,14 @@ import net.fabricmc.api.EnvType;
 import net.fabricmc.api.Environment;
 import net.minecraft.text.TextColor;
 
-import java.util.Collection;
 import java.util.*;
-import java.util.stream.Collectors;
+import java.util.Collection;
 import java.util.stream.Stream;
 
 @Environment(EnvType.CLIENT)
 public final class GuiRegistry {
 
-    private static final List<Provider> globalProviders = Stream.concat(Stream.of(
+    private static final List<Provider> globalProviders = Lists.newArrayList(
             Provider.create(BooleanEntry.class, entry -> ConfigEntryBuilder.create()
                             .startBooleanToggle(entry.getText(), entry.getValue())
                             .setDefaultValue(entry.getDefaultValue())
@@ -165,11 +165,13 @@ public final class GuiRegistry {
                         .setTooltip(entry.getTooltip())
                         .setSaveConsumer3(entry::setValue),
                     entry -> !entry.isAlphaMode(), TextColor.class)
-    ), CompleteConfig.getExtensions().stream().filter(extension -> {
-        return extension instanceof GuiExtension;
-    }).map(extension -> {
-        return ((GuiExtension) extension).getProviders();
-    }).filter(Objects::nonNull).flatMap(Collection::stream)).collect(Collectors.toList());
+    );
+
+    static {
+        for (Collection<Provider> providers : CompleteConfig.collectExtensions(GuiExtension.class, GuiExtension::getProviders)) {
+            globalProviders.addAll(providers);
+        }
+    }
 
     private final List<Provider> providers = new ArrayList<>();
 

+ 3 - 6
lib/src/main/java/me/lortseam/completeconfig/io/ConfigSource.java

@@ -17,7 +17,6 @@ import org.spongepowered.configurate.serialize.TypeSerializerCollection;
 import java.nio.file.Path;
 import java.util.Arrays;
 import java.util.HashSet;
-import java.util.Objects;
 import java.util.Set;
 
 @Log4j2
@@ -64,11 +63,9 @@ public final class ConfigSource {
                 .path(path)
                 .defaultOptions(options -> options.serializers(builder -> {
                     builder.registerAll(GLOBAL_TYPE_SERIALIZERS);
-                    CompleteConfig.getExtensions().stream().filter(extension -> {
-                        return extension instanceof CompleteConfigExtension;
-                    }).map(extension -> {
-                        return ((CompleteConfigExtension) extension).getTypeSerializers();
-                    }).filter(Objects::nonNull).forEach(builder::registerAll);
+                    for (TypeSerializerCollection collection : CompleteConfig.collectExtensions(CompleteConfigExtension.class, CompleteConfigExtension::getTypeSerializers)) {
+                        builder.registerAll(collection);
+                    }
                 }))
                 .build();
     }