diff --git a/core/src/main/java/cc/carm/lib/configuration/source/ConfigurationHolder.java b/core/src/main/java/cc/carm/lib/configuration/source/ConfigurationHolder.java index 8502a90..3b73614 100644 --- a/core/src/main/java/cc/carm/lib/configuration/source/ConfigurationHolder.java +++ b/core/src/main/java/cc/carm/lib/configuration/source/ConfigurationHolder.java @@ -6,8 +6,8 @@ import cc.carm.lib.configuration.adapter.ValueType; import cc.carm.lib.configuration.source.loader.ConfigurationInitializer; import cc.carm.lib.configuration.source.meta.ConfigurationMetaHolder; import cc.carm.lib.configuration.source.meta.ConfigurationMetadata; +import cc.carm.lib.configuration.source.option.ConfigurationOption; import cc.carm.lib.configuration.source.option.ConfigurationOptionHolder; -import cc.carm.lib.configuration.source.option.StandardOptions; import cc.carm.lib.configuration.source.section.ConfigureSource; import cc.carm.lib.configuration.value.ValueManifest; import org.jetbrains.annotations.Contract; @@ -51,6 +51,10 @@ public abstract class ConfigurationHolder O option(@NotNull ConfigurationOption option) { + return options().get(option); + } + public @NotNull Map metadata() { return this.metadata; } diff --git a/core/src/main/java/cc/carm/lib/configuration/source/loader/ConfigurationInitializer.java b/core/src/main/java/cc/carm/lib/configuration/source/loader/ConfigurationInitializer.java index 059407e..4f69dc3 100644 --- a/core/src/main/java/cc/carm/lib/configuration/source/loader/ConfigurationInitializer.java +++ b/core/src/main/java/cc/carm/lib/configuration/source/loader/ConfigurationInitializer.java @@ -108,13 +108,13 @@ public class ConfigurationInitializer { public void initialize(@NotNull ConfigurationHolder holder, @NotNull Configuration config) throws Exception { initializeInstance(holder, config, null, null); - if (holder.options().get(StandardOptions.SET_DEFAULTS)) holder.save(); + if (holder.option(StandardOptions.SET_DEFAULTS)) holder.save(); } public void initialize(@NotNull ConfigurationHolder holder, @NotNull Class clazz) throws Exception { initializeStaticClass(holder, clazz, null, null); - if (holder.options().get(StandardOptions.SET_DEFAULTS)) holder.save(); + if (holder.option(StandardOptions.SET_DEFAULTS)) holder.save(); } @@ -149,7 +149,7 @@ public class ConfigurationInitializer { initializeField(holder, clazz, field, path); } - if (holder.options().get(StandardOptions.LOAD_SUB_CLASSES)) { + if (holder.option(StandardOptions.LOAD_SUB_CLASSES)) { Class[] classes = clazz.getDeclaredClasses(); for (int i = classes.length - 1; i >= 0; i--) { // 逆向加载,保持顺序。 initializeStaticClass(holder, classes[i], path, null); @@ -175,8 +175,11 @@ public class ConfigurationInitializer { } catch (Exception e) { e.printStackTrace(); } - if (holder.options().get(StandardOptions.SET_DEFAULTS)) { - value.setDefault(); + if (holder.option(StandardOptions.SET_DEFAULTS)) { + value.setDefault(); // Set default value. + } + if (holder.option(StandardOptions.PRELOAD)) { + value.get(); // Preload the value by calling #get method. } } else if (source instanceof Configuration && object instanceof Configuration) { // 当且仅当 源字段与字段 均为Configuration实例时,才对目标字段进行下一步初始化加载。 diff --git a/core/src/main/java/cc/carm/lib/configuration/source/loader/PathGenerator.java b/core/src/main/java/cc/carm/lib/configuration/source/loader/PathGenerator.java index 665f43a..33595d7 100644 --- a/core/src/main/java/cc/carm/lib/configuration/source/loader/PathGenerator.java +++ b/core/src/main/java/cc/carm/lib/configuration/source/loader/PathGenerator.java @@ -86,7 +86,7 @@ public class PathGenerator { } public static char pathSeparator(ConfigurationHolder holder) { - return holder.options().get(StandardOptions.PATH_SEPARATOR); + return holder.option(StandardOptions.PATH_SEPARATOR); } /** diff --git a/core/src/main/java/cc/carm/lib/configuration/source/option/ConfigurationOption.java b/core/src/main/java/cc/carm/lib/configuration/source/option/ConfigurationOption.java index 4f6068d..c0b51d0 100644 --- a/core/src/main/java/cc/carm/lib/configuration/source/option/ConfigurationOption.java +++ b/core/src/main/java/cc/carm/lib/configuration/source/option/ConfigurationOption.java @@ -6,32 +6,20 @@ import java.util.function.Supplier; public class ConfigurationOption { - @SuppressWarnings("unchecked") public static ConfigurationOption of(@NotNull T defaultValue) { - return of((Class) defaultValue.getClass(), defaultValue); - } - - public static ConfigurationOption of(@NotNull Class valueClazz, @NotNull T defaultValue) { - return new ConfigurationOption<>(valueClazz, defaultValue); + return new ConfigurationOption<>(defaultValue); } public static ConfigurationOption of(@NotNull Supplier defaultValue) { return of(defaultValue.get()); } - private final @NotNull Class valueClazz; private @NotNull V defaultValue; - public ConfigurationOption(@NotNull Class valueClazz, @NotNull V defaultValue) { - this.valueClazz = valueClazz; + public ConfigurationOption(@NotNull V defaultValue) { this.defaultValue = defaultValue; } - @NotNull - public Class valueClass() { - return this.valueClazz; - } - public @NotNull V defaults() { return defaultValue; } diff --git a/core/src/main/java/cc/carm/lib/configuration/value/ConfigValue.java b/core/src/main/java/cc/carm/lib/configuration/value/ConfigValue.java index b9fe6c0..67c5eb3 100644 --- a/core/src/main/java/cc/carm/lib/configuration/value/ConfigValue.java +++ b/core/src/main/java/cc/carm/lib/configuration/value/ConfigValue.java @@ -113,7 +113,7 @@ public abstract class ConfigValue extends ValueManifest { * @param override Whether to overwrite existing configured value */ public void setDefault(boolean override) { - if (!override && config().contains(path())) return; + if (config().contains(path()) && !override) return; // Skip if the value is already set set(defaults()); // Set the default value } diff --git a/features/commentable/src/main/java/cc/carm/lib/configuration/commentable/Commentable.java b/features/commentable/src/main/java/cc/carm/lib/configuration/commentable/Commentable.java index 35dac7c..ea46a62 100644 --- a/features/commentable/src/main/java/cc/carm/lib/configuration/commentable/Commentable.java +++ b/features/commentable/src/main/java/cc/carm/lib/configuration/commentable/Commentable.java @@ -26,7 +26,7 @@ public class Commentable { String comment = getInlineComment(holder, path, null); if (comment != null) return comment; - String sep = String.valueOf(holder.options().get(StandardOptions.PATH_SEPARATOR)); + String sep = String.valueOf(holder.option(StandardOptions.PATH_SEPARATOR)); // If the comment is not found, try to get the comment from the parent section String[] keys = path.split(Pattern.quote(sep)); diff --git a/providers/yaml/src/main/java/cc/carm/lib/configuration/source/yaml/YAMLSource.java b/providers/yaml/src/main/java/cc/carm/lib/configuration/source/yaml/YAMLSource.java index 7b0cc09..6e10a6b 100644 --- a/providers/yaml/src/main/java/cc/carm/lib/configuration/source/yaml/YAMLSource.java +++ b/providers/yaml/src/main/java/cc/carm/lib/configuration/source/yaml/YAMLSource.java @@ -111,7 +111,7 @@ public class YAMLSource CommentedYAMLWriter writer = new CommentedYAMLWriter( String.valueOf(this.pathSeparator()), dumperOptions().getIndent(), - holder.options().get(CommentableOptions.COMMENT_EMPTY_VALUE) + holder.option(CommentableOptions.COMMENT_EMPTY_VALUE) ); try { fileWriter(w -> w.write(writer.saveToString(this)));