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:
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user