1
mirror of https://github.com/CarmJos/EasyConfiguration.git synced 2026-06-04 18:48:20 +08:00

[2.2.0] 实现内部静态类的自动注册。

This commit is contained in:
2022-04-22 17:16:06 +08:00
parent ab2f898164
commit 51c287a0a7
8 changed files with 47 additions and 19 deletions
@@ -18,18 +18,34 @@ public class ConfigInitializer<T extends ConfigurationProvider<?>> {
}
public void initialize(@NotNull Class<? extends ConfigurationRoot> clazz, boolean saveDefaults) {
initializeClass(clazz, null, null, null, null, saveDefaults);
initialize(clazz, saveDefaults, true);
}
public void initialize(@NotNull Class<? extends ConfigurationRoot> clazz,
boolean saveDefaults, boolean loadSubClasses) {
initializeClass(clazz, null, null, null, null, saveDefaults, loadSubClasses);
}
protected void initializeClass(@NotNull Class<?> clazz,
@Nullable String parentPath, @Nullable String fieldName,
@Nullable ConfigPath fieldPath, @Nullable ConfigComment filedComments,
boolean saveDefaults) {
if (!ConfigurationRoot.class.isAssignableFrom(clazz)) return;
boolean saveDefaults, boolean loadSubClasses) {
String path = getClassPath(clazz, parentPath, fieldName, fieldPath);
if (path != null) setComments(path, getClassComments(clazz, filedComments));
for (Field field : clazz.getDeclaredFields()) {
initializeField(clazz, field, path, saveDefaults);
initializeField(clazz, field, path, saveDefaults, loadSubClasses);
}
Class<?>[] classes = clazz.getDeclaredClasses();
if (loadSubClasses && classes.length > 0) {
// 逆向加载,保持顺序。
for (int i = classes.length - 1; i >= 0; i--) {
initializeClass(
classes[i], path, classes[i].getSimpleName(),
null, null,
saveDefaults, true
);
}
}
}
@@ -39,8 +55,8 @@ public class ConfigInitializer<T extends ConfigurationProvider<?>> {
value.initialize(provider, saveDefaults, path, comments);
}
private void initializeField(@NotNull Class<?> source, @NotNull Field field,
@Nullable String parent, boolean saveDefaults) {
private void initializeField(@NotNull Class<?> source, @NotNull Field field, @Nullable String parent,
boolean saveDefaults, boolean loadSubClasses) {
try {
field.setAccessible(true);
@@ -55,7 +71,7 @@ public class ConfigInitializer<T extends ConfigurationProvider<?>> {
(Class<?>) object, parent, field.getName(),
field.getAnnotation(ConfigPath.class),
field.getAnnotation(ConfigComment.class),
saveDefaults
saveDefaults, loadSubClasses
);
}
} catch (IllegalAccessException ignored) {
@@ -5,6 +5,8 @@ import cc.carm.lib.configuration.core.function.ConfigDataFunction;
import cc.carm.lib.configuration.core.value.type.ConfiguredList;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class SourceListBuilder<S, V> extends CommonConfigBuilder<List<V>, SourceListBuilder<S, V>> {
@@ -30,6 +32,11 @@ public class SourceListBuilder<S, V> extends CommonConfigBuilder<List<V>, Source
this.valueSerializer = valueSerializer;
}
@SafeVarargs
public final @NotNull SourceListBuilder<S, V> defaults(@NotNull V... values) {
return defaults(new ArrayList<>(Arrays.asList(values)));
}
public @NotNull SourceListBuilder<S, V> parseSource(ConfigDataFunction<Object, S> sourceParser) {
this.sourceParser = sourceParser;
return this;
@@ -41,4 +41,8 @@ public abstract class ConfigurationProvider<W extends ConfigurationWrapper> {
getInitializer().initialize(configClazz, saveDefaults);
}
public void initialize(Class<? extends ConfigurationRoot> configClazz, boolean saveDefaults, boolean loadSubClasses) {
getInitializer().initialize(configClazz, saveDefaults, loadSubClasses);
}
}