From 892e236a74c0ed2428be49a76fe7b3ecc53036cf Mon Sep 17 00:00:00 2001 From: Paint_Ninja Date: Sat, 30 Dec 2023 21:39:41 +0000 Subject: [PATCH] Optimise ForgeConfigSpec and make Range public (#9828) Backport of #9810 to 1.18.2 --- build.gradle | 2 +- .../common/ForgeConfigSpec.java | 42 +++++++++---------- 2 files changed, 21 insertions(+), 23 deletions(-) diff --git a/build.gradle b/build.gradle index fc1b671c0d..30fdb6b716 100644 --- a/build.gradle +++ b/build.gradle @@ -34,7 +34,7 @@ import org.gradle.plugins.ide.eclipse.model.SourceFolder plugins { id 'org.cadixdev.licenser' version '0.6.1' id 'com.github.ben-manes.versions' version '0.36.0' - id 'net.minecraftforge.gradleutils' version '2.+' + id 'net.minecraftforge.gradleutils' version '[2.2,2.3)' id 'eclipse' id 'de.undercouch.download' version '5.1.3' } diff --git a/src/main/java/net/minecraftforge/common/ForgeConfigSpec.java b/src/main/java/net/minecraftforge/common/ForgeConfigSpec.java index 7fb8dcfb3b..5ffdbb4db1 100644 --- a/src/main/java/net/minecraftforge/common/ForgeConfigSpec.java +++ b/src/main/java/net/minecraftforge/common/ForgeConfigSpec.java @@ -24,6 +24,7 @@ import java.util.Objects; import java.util.function.Function; import java.util.function.Predicate; import java.util.function.Supplier; +import java.util.regex.Pattern; import java.util.stream.Collectors; import javax.annotation.Nonnull; @@ -55,14 +56,16 @@ import com.google.common.collect.ObjectArrays; */ public class ForgeConfigSpec extends UnmodifiableConfigWrapper implements IConfigSpec//TODO: Remove extends and pipe everything through getSpec/getValues? { - private Map, String> levelComments; - private Map, String> levelTranslationKeys; + private final Map, String> levelComments; + private final Map, String> levelTranslationKeys; - private UnmodifiableConfig values; + private final UnmodifiableConfig values; private Config childConfig; private boolean isCorrecting = false; + private static final Pattern WINDOWS_NEWLINE = Pattern.compile("\r\n"); + private ForgeConfigSpec(UnmodifiableConfig storage, UnmodifiableConfig values, Map, String> levelComments, Map, String> levelTranslationKeys) { super(storage); this.values = values; @@ -123,11 +126,9 @@ public class ForgeConfigSpec extends UnmodifiableConfigWrapper configValues) { configValues.forEach(value -> { - if (value instanceof ConfigValue) { - final ConfigValue configValue = (ConfigValue) value; + if (value instanceof ConfigValue configValue) { configValue.clearCache(); - } else if (value instanceof Config) { - final Config innerConfig = (Config) value; + } else if (value instanceof Config innerConfig) { this.resetCaches(innerConfig.valueMap().values()); } }); @@ -266,15 +267,12 @@ public class ForgeConfigSpec extends UnmodifiableConfigWrapper 0 && string2.length() > 0) + if (!string1.isEmpty() && !string2.isEmpty()) { - return string1.replaceAll("\r\n", "\n") - .equals(string2.replaceAll("\r\n", "\n")); + return WINDOWS_NEWLINE.matcher(string1).replaceAll("\n") + .equals(WINDOWS_NEWLINE.matcher(string2).replaceAll("\n")); } } @@ -286,10 +284,10 @@ public class ForgeConfigSpec extends UnmodifiableConfigWrapper, String> levelComments = new HashMap<>(); - private Map, String> levelTranslationKeys = new HashMap<>(); - private List currentPath = new ArrayList<>(); - private List> values = new ArrayList<>(); + private final Map, String> levelComments = new HashMap<>(); + private final Map, String> levelTranslationKeys = new HashMap<>(); + private final List currentPath = new ArrayList<>(); + private final List> values = new ArrayList<>(); private boolean hasInvalidComment = false; //Object @@ -375,7 +373,7 @@ public class ForgeConfigSpec extends UnmodifiableConfigWrapper list = Lists.newArrayList((List) value); + List list = new ArrayList<>((List) value); list.removeIf(elementValidator.negate()); if (list.isEmpty()) { LogManager.getLogger().debug(CORE, "List on key {} is deemed to need correction. It failed validation.", path.get(path.size() - 1)); @@ -395,7 +393,7 @@ public class ForgeConfigSpec extends UnmodifiableConfigWrapper list = Lists.newArrayList((List) value); + List list = new ArrayList<>((List) value); list.removeIf(elementValidator.negate()); if (list.isEmpty()) { LogManager.getLogger().debug(CORE, "List on key {} is deemed to need correction. It failed validation.", path.get(path.size() - 1)); @@ -696,7 +694,7 @@ public class ForgeConfigSpec extends UnmodifiableConfigWrapper> implements Predicate + public static class Range> implements Predicate { private final Class clazz; private final V min; @@ -832,7 +830,7 @@ public class ForgeConfigSpec extends UnmodifiableConfigWrapper getPath() { - return Lists.newArrayList(path); + return new ArrayList<>(path); } @Override