Explorar o código

Make collection children immutable

Lortseam %!s(int64=4) %!d(string=hai) anos
pai
achega
00222e58d8

+ 9 - 7
src/main/java/me/lortseam/completeconfig/data/Collection.java

@@ -1,6 +1,5 @@
 package me.lortseam.completeconfig.data;
 
-import lombok.Getter;
 import lombok.extern.log4j.Log4j2;
 import me.lortseam.completeconfig.api.ConfigEntryContainer;
 import me.lortseam.completeconfig.api.ConfigGroup;
@@ -11,19 +10,14 @@ import net.minecraft.text.Text;
 
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Log4j2
 public class Collection implements FlatDataPart<ConfigMap> {
 
     protected final TranslationIdentifier translation;
-    @Getter
     private final EntryMap entries;
-    @Getter
     private final CollectionMap collections;
 
     Collection(TranslationIdentifier translation) {
@@ -36,6 +30,14 @@ public class Collection implements FlatDataPart<ConfigMap> {
         return translation.toText();
     }
 
+    public java.util.Collection<Entry> getEntries() {
+        return Collections.unmodifiableCollection(entries.values());
+    }
+
+    public java.util.Collection<Collection> getCollections() {
+        return Collections.unmodifiableCollection(collections.values());
+    }
+
     void resolve(ConfigEntryContainer container) {
         entries.resolve(container);
         List<ConfigEntryContainer> containers = new ArrayList<>();

+ 4 - 4
src/main/java/me/lortseam/completeconfig/gui/cloth/ClothConfigScreenBuilder.java

@@ -43,11 +43,11 @@ public class ClothConfigScreenBuilder implements ConfigScreenBuilder {
         builder.setTitle(customTitle.exists() ? customTitle.toText() : new TranslatableText("completeconfig.gui.defaultTitle", FabricLoader.getInstance().getModContainer(config.getModID()).get().getMetadata().getName()));
         if (!config.getEntries().isEmpty()) {
             ConfigCategory category = builder.getOrCreateCategory(config.getText());
-            for (Entry<?> entry : config.getEntries().values()) {
+            for (Entry<?> entry : config.getEntries()) {
                 category.addEntry(buildEntry(entry));
             }
         }
-        for(Collection collection : config.getCollections().values()) {
+        for(Collection collection : config.getCollections()) {
             ConfigCategory category = builder.getOrCreateCategory(collection.getText());
             for (AbstractConfigListEntry<?> entry : buildCollection(collection)) {
                 category.addEntry(entry);
@@ -64,10 +64,10 @@ public class ClothConfigScreenBuilder implements ConfigScreenBuilder {
 
     private List<AbstractConfigListEntry> buildCollection(Collection collection) {
         List<AbstractConfigListEntry> collectionGui = new ArrayList<>();
-        for (Entry<?> entry : collection.getEntries().values()) {
+        for (Entry<?> entry : collection.getEntries()) {
             collectionGui.add(buildEntry(entry));
         }
-        for (Collection c : collection.getCollections().values()) {
+        for (Collection c : collection.getCollections()) {
             SubCategoryBuilder subBuilder = ConfigEntryBuilder.create().startSubCategory(c.getText());
             subBuilder.addAll(buildCollection(c));
             collectionGui.add(subBuilder.build());

+ 11 - 12
src/test/java/me/lortseam/completeconfig/ConfigTest.java

@@ -5,7 +5,6 @@ import me.lortseam.completeconfig.containers.*;
 import me.lortseam.completeconfig.data.Config;
 import me.lortseam.completeconfig.data.Entry;
 import me.lortseam.completeconfig.data.EntryBase;
-import me.lortseam.completeconfig.data.EntryMap;
 import me.lortseam.completeconfig.io.ConfigSource;
 import nl.altindag.log.LogCaptor;
 import org.apache.logging.log4j.core.util.ReflectionUtil;
@@ -92,33 +91,33 @@ public class ConfigTest {
 
                 @Test
                 public void includeAnnotatedFieldOnlyIfNonPOJO() throws NoSuchFieldException {
-                    EntryMap entries = builder.add(new ContainerWithSingleEntry()).build().getEntries();
-                    assertEquals(1, entries.size());
-                    assertEquals(entries.values().iterator().next().getField(), ContainerWithSingleEntry.class.getDeclaredField("entry"));
+                    Config config = builder.add(new ContainerWithSingleEntry()).build();
+                    assertEquals(1, config.getEntries().size());
+                    assertEquals(config.getEntries().iterator().next().getField(), ContainerWithSingleEntry.class.getDeclaredField("entry"));
                 }
 
                 @Test
                 public void includeFieldIfPOJO() {
-                    EntryMap entries = builder.add(new POJOContainerWithSingleEntry()).build().getEntries();
-                    assertEquals(1, entries.size());
+                    Config config = builder.add(new POJOContainerWithSingleEntry()).build();
+                    assertEquals(1, config.getEntries().size());
                 }
 
                 @Test
                 public void ignoreFieldIfAnnotatedWithIgnore() {
-                    EntryMap entries = builder.add(new POJOContainerWithSingleIgnoredField()).build().getEntries();
-                    assertEquals(0, entries.size());
+                    Config config = builder.add(new POJOContainerWithSingleIgnoredField()).build();
+                    assertEquals(0, config.getEntries().size());
                 }
 
                 @Test
                 public void includeSuperclassField() {
-                    EntryMap entries = builder.add(new SubclassOfContainerWithSingleEntry()).build().getEntries();
-                    assertEquals(1, entries.size());
+                    Config config = builder.add(new SubclassOfContainerWithSingleEntry()).build();
+                    assertEquals(1, config.getEntries().size());
                 }
 
                 @Test
                 public void excludeStaticSuperclassField() {
-                    EntryMap entries = builder.add(new SubclassOfContainerWithSingleStaticEntry()).build().getEntries();
-                    assertEquals(0, entries.size());
+                    Config config = builder.add(new SubclassOfContainerWithSingleStaticEntry()).build();
+                    assertEquals(0, config.getEntries().size());
                 }
 
             }