From 2f97c1e3c3bca46e483e308ab50092e277ce31b1 Mon Sep 17 00:00:00 2001 From: Spottedleaf Date: Wed, 7 Aug 2024 06:18:30 -0700 Subject: [PATCH] Always invoke config initialisers This resolves an issue where the worker threads were not initialised if the config file did not exist already. --- .../common/config/InitialiseHook.java | 7 ++++ .../common/config/PostDeserializeHook.java | 7 ---- .../config/adapter/TypeAdapterRegistry.java | 39 +++++++++++++++---- .../common/config/config/YamlConfig.java | 4 ++ .../config/moonrise/MoonriseConfig.java | 10 ++--- .../moonrise/common/util/MoonriseCommon.java | 8 ++++ 6 files changed, 56 insertions(+), 19 deletions(-) create mode 100644 src/main/java/ca/spottedleaf/moonrise/common/config/InitialiseHook.java delete mode 100644 src/main/java/ca/spottedleaf/moonrise/common/config/PostDeserializeHook.java diff --git a/src/main/java/ca/spottedleaf/moonrise/common/config/InitialiseHook.java b/src/main/java/ca/spottedleaf/moonrise/common/config/InitialiseHook.java new file mode 100644 index 0000000..c243290 --- /dev/null +++ b/src/main/java/ca/spottedleaf/moonrise/common/config/InitialiseHook.java @@ -0,0 +1,7 @@ +package ca.spottedleaf.moonrise.common.config; + +public interface InitialiseHook { + + public void initialise(); + +} diff --git a/src/main/java/ca/spottedleaf/moonrise/common/config/PostDeserializeHook.java b/src/main/java/ca/spottedleaf/moonrise/common/config/PostDeserializeHook.java deleted file mode 100644 index a84b317..0000000 --- a/src/main/java/ca/spottedleaf/moonrise/common/config/PostDeserializeHook.java +++ /dev/null @@ -1,7 +0,0 @@ -package ca.spottedleaf.moonrise.common.config; - -public interface PostDeserializeHook { - - public void deserialize(); - -} diff --git a/src/main/java/ca/spottedleaf/moonrise/common/config/adapter/TypeAdapterRegistry.java b/src/main/java/ca/spottedleaf/moonrise/common/config/adapter/TypeAdapterRegistry.java index 8822c93..a9f933f 100644 --- a/src/main/java/ca/spottedleaf/moonrise/common/config/adapter/TypeAdapterRegistry.java +++ b/src/main/java/ca/spottedleaf/moonrise/common/config/adapter/TypeAdapterRegistry.java @@ -1,10 +1,9 @@ package ca.spottedleaf.moonrise.common.config.adapter; -import ca.spottedleaf.moonrise.common.config.PostDeserializeHook; +import ca.spottedleaf.moonrise.common.config.InitialiseHook; import ca.spottedleaf.moonrise.common.config.adapter.collection.CollectionTypeAdapter; import ca.spottedleaf.moonrise.common.config.adapter.collection.ListTypeAdapter; import ca.spottedleaf.moonrise.common.config.adapter.collection.SortedMapTypeAdapter; -import ca.spottedleaf.moonrise.common.config.adapter.collection.UnsortedMapTypeAdapter; import ca.spottedleaf.moonrise.common.config.adapter.primitive.BooleanTypeAdapter; import ca.spottedleaf.moonrise.common.config.adapter.primitive.ByteTypeAdapter; import ca.spottedleaf.moonrise.common.config.adapter.primitive.DoubleTypeAdapter; @@ -32,7 +31,6 @@ import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.TreeMap; public final class TypeAdapterRegistry { @@ -117,6 +115,20 @@ public final class TypeAdapterRegistry { return ret; } + public void callInitialisers(final T object) { + if (object == null) { + return; + } + + final TypeAdapter adapter = this.getAdapter(object.getClass()); + + if (!(adapter instanceof AutoTypeAdapter autoTypeAdapter)) { + return; + } + + ((AutoTypeAdapter)autoTypeAdapter).callInitialisers(object); + } + private static final class AutoTypeAdapter extends TypeAdapter> { private final TypeAdapterRegistry registry; @@ -229,10 +241,6 @@ public final class TypeAdapterRegistry { field.field.set(ret, field.adapter.deserialize(registry, fieldValue, field.field.getGenericType())); } - if (ret instanceof PostDeserializeHook hook) { - hook.deserialize(); - } - return ret; } catch (final Exception ex) { throw new RuntimeException(ex); @@ -267,6 +275,23 @@ public final class TypeAdapterRegistry { return ret; } + + public void callInitialisers(final T value) { + for (final SerializableField field : this.fields) { + final Object fieldValue; + try { + fieldValue = field.field.get(value); + } catch (final Exception ex) { + throw new RuntimeException(ex); + } + + if (fieldValue instanceof InitialiseHook initialiseHook) { + initialiseHook.initialise(); + } + + this.registry.callInitialisers(fieldValue); + } + } } public static final class CommentedData { diff --git a/src/main/java/ca/spottedleaf/moonrise/common/config/config/YamlConfig.java b/src/main/java/ca/spottedleaf/moonrise/common/config/config/YamlConfig.java index 44c1479..a699aa4 100644 --- a/src/main/java/ca/spottedleaf/moonrise/common/config/config/YamlConfig.java +++ b/src/main/java/ca/spottedleaf/moonrise/common/config/config/YamlConfig.java @@ -131,6 +131,10 @@ public final class YamlConfig { return ret.append(this.saveToString()).toString(); } + public void callInitialisers() { + this.typeAdapters.callInitialisers(this.config); + } + private static final class YamlConstructor extends Constructor { public YamlConstructor(final LoaderOptions loadingConfig) { diff --git a/src/main/java/ca/spottedleaf/moonrise/common/config/moonrise/MoonriseConfig.java b/src/main/java/ca/spottedleaf/moonrise/common/config/moonrise/MoonriseConfig.java index c7de95a..795a950 100644 --- a/src/main/java/ca/spottedleaf/moonrise/common/config/moonrise/MoonriseConfig.java +++ b/src/main/java/ca/spottedleaf/moonrise/common/config/moonrise/MoonriseConfig.java @@ -1,6 +1,6 @@ package ca.spottedleaf.moonrise.common.config.moonrise; -import ca.spottedleaf.moonrise.common.config.PostDeserializeHook; +import ca.spottedleaf.moonrise.common.config.InitialiseHook; import ca.spottedleaf.moonrise.common.config.annotation.Adaptable; import ca.spottedleaf.moonrise.common.config.ui.ClothConfig; import ca.spottedleaf.moonrise.common.config.annotation.Serializable; @@ -147,7 +147,7 @@ public final class MoonriseConfig { public WorkerPool workerPool = new WorkerPool(); @Adaptable - public static final class WorkerPool implements PostDeserializeHook { + public static final class WorkerPool implements InitialiseHook { @Serializable( comment = """ Set the number of shared worker threads to be used by chunk rendering, @@ -163,7 +163,7 @@ public final class MoonriseConfig { public int workerThreads = -1; @Override - public void deserialize() { + public void initialise() { MoonriseCommon.adjustWorkerThreads(this); } } @@ -172,7 +172,7 @@ public final class MoonriseConfig { public ChunkSystem chunkSystem = new ChunkSystem(); @Adaptable - public static final class ChunkSystem implements PostDeserializeHook { + public static final class ChunkSystem implements InitialiseHook { @Serializable( comment = """ @@ -205,7 +205,7 @@ public final class MoonriseConfig { public boolean populationGenParallelism = false; @Override - public void deserialize() { + public void initialise() { ChunkTaskScheduler.init(this); } } diff --git a/src/main/java/ca/spottedleaf/moonrise/common/util/MoonriseCommon.java b/src/main/java/ca/spottedleaf/moonrise/common/util/MoonriseCommon.java index 6344910..93b93a2 100644 --- a/src/main/java/ca/spottedleaf/moonrise/common/util/MoonriseCommon.java +++ b/src/main/java/ca/spottedleaf/moonrise/common/util/MoonriseCommon.java @@ -117,6 +117,14 @@ public final class MoonriseCommon { } public static boolean reloadConfig() { + final boolean ret = reloadConfig0(); + + CONFIG.callInitialisers(); + + return ret; + } + + private static boolean reloadConfig0() { synchronized (CONFIG) { if (CONFIG_FILE.exists()) { try {