diff --git a/core/pom.xml b/core/pom.xml
index 2721032..bb8fc32 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -5,7 +5,7 @@
easyconfiguration-parent
cc.carm.lib
- 1.0.6
+ 1.1.0
4.0.0
diff --git a/core/src/main/java/cc/carm/lib/configuration/core/ConfigInitializer.java b/core/src/main/java/cc/carm/lib/configuration/core/ConfigInitializer.java
index 32e836c..0638a65 100644
--- a/core/src/main/java/cc/carm/lib/configuration/core/ConfigInitializer.java
+++ b/core/src/main/java/cc/carm/lib/configuration/core/ConfigInitializer.java
@@ -11,13 +11,19 @@ import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.Optional;
-public class ConfigInitializer {
+public class ConfigInitializer> {
- public static void initialize(ConfigurationProvider source, Class extends ConfigurationRoot> rootClazz) {
- initialize(source, rootClazz, true);
+ protected final @NotNull T provider;
+
+ public ConfigInitializer(@NotNull T provider) {
+ this.provider = provider;
}
- public static void initialize(ConfigurationProvider provider, Class extends ConfigurationRoot> rootClazz, boolean saveDefault) {
+ public void initialize(Class extends ConfigurationRoot> rootClazz) {
+ initialize(rootClazz, true);
+ }
+
+ public void initialize(Class extends ConfigurationRoot> rootClazz, boolean saveDefault) {
String rootSection = null;
ConfigPath sectionAnnotation = rootClazz.getAnnotation(ConfigPath.class);
@@ -34,11 +40,11 @@ public class ConfigInitializer {
}
for (Class> innerClass : rootClazz.getDeclaredClasses()) {
- initSection(provider, rootSection, innerClass, saveDefault);
+ initSection(rootSection, innerClass, saveDefault);
}
for (Field field : rootClazz.getDeclaredFields()) {
- initValue(provider, rootSection, rootClazz, field, saveDefault);
+ initValue(rootSection, rootClazz, field, saveDefault);
}
if (saveDefault) {
@@ -51,7 +57,7 @@ public class ConfigInitializer {
}
- private static void initSection(ConfigurationProvider provider, String parentSection, Class> clazz, boolean saveDefault) {
+ private void initSection(String parentSection, Class> clazz, boolean saveDefault) {
if (!Modifier.isStatic(clazz.getModifiers()) || !Modifier.isPublic(clazz.getModifiers())) return;
String section = getSectionPath(clazz.getSimpleName(), parentSection, clazz.getAnnotation(ConfigPath.class));
@@ -60,18 +66,18 @@ public class ConfigInitializer {
provider.setComments(parentSection, comments.value());
}
- for (Field field : clazz.getDeclaredFields()) initValue(provider, section, clazz, field, saveDefault);
- for (Class> innerClass : clazz.getDeclaredClasses()) initSection(provider, section, innerClass, saveDefault);
+ for (Field field : clazz.getDeclaredFields()) initValue(section, clazz, field, saveDefault);
+ for (Class> innerClass : clazz.getDeclaredClasses()) initSection(section, innerClass, saveDefault);
}
- private static void initValue(ConfigurationProvider provider, String parentSection, Class> clazz, Field field, boolean saveDefault) {
+ private void initValue(String parentSection, Class> clazz, Field field, boolean saveDefault) {
try {
field.setAccessible(true);
Object object = field.get(clazz);
if (object instanceof ConfigValue>) {
initializeValue(
- provider, (ConfigValue>) object, saveDefault,
+ (ConfigValue>) object, saveDefault,
getSectionPath(field.getName(), parentSection, field.getAnnotation(ConfigPath.class)),
Optional.ofNullable(field.getAnnotation(ConfigComment.class))
.map(ConfigComment::value).orElse(new String[0])
@@ -82,8 +88,8 @@ public class ConfigInitializer {
}
- public static void initializeValue(@NotNull ConfigurationProvider provider, @NotNull ConfigValue> value,
- boolean saveDefault, @NotNull String path, @NotNull String[] comments) {
+ public void initializeValue(@NotNull ConfigValue> value, boolean saveDefault,
+ @NotNull String path, @NotNull String[] comments) {
value.initialize(provider, path, comments);
if (saveDefault && value.getDefaultValue() != null && !provider.getConfiguration().contains(path)) {
value.setDefault();
diff --git a/core/src/main/java/cc/carm/lib/configuration/core/builder/AbstractConfigBuilder.java b/core/src/main/java/cc/carm/lib/configuration/core/builder/AbstractConfigBuilder.java
index f1f355c..2b6b275 100644
--- a/core/src/main/java/cc/carm/lib/configuration/core/builder/AbstractConfigBuilder.java
+++ b/core/src/main/java/cc/carm/lib/configuration/core/builder/AbstractConfigBuilder.java
@@ -5,20 +5,25 @@ import cc.carm.lib.configuration.core.value.ConfigValue;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-public abstract class AbstractConfigBuilder, T> {
+public abstract class AbstractConfigBuilder, P extends ConfigurationProvider>> {
+ protected final Class super P> providerClass;
- protected @Nullable ConfigurationProvider provider;
+ protected @Nullable P provider;
protected @Nullable String path;
protected @NotNull String[] comments = new String[0];
protected @Nullable T defaultValue;
+ public AbstractConfigBuilder(Class super P> providerClass) {
+ this.providerClass = providerClass;
+ }
+
protected abstract @NotNull B getThis();
public abstract @NotNull ConfigValue> build();
- public @NotNull B from(@Nullable ConfigurationProvider provider) {
+ public @NotNull B from(@Nullable P provider) {
this.provider = provider;
return getThis();
}
diff --git a/core/src/main/java/cc/carm/lib/configuration/core/builder/CommonConfigBuilder.java b/core/src/main/java/cc/carm/lib/configuration/core/builder/CommonConfigBuilder.java
new file mode 100644
index 0000000..72b395c
--- /dev/null
+++ b/core/src/main/java/cc/carm/lib/configuration/core/builder/CommonConfigBuilder.java
@@ -0,0 +1,46 @@
+package cc.carm.lib.configuration.core.builder;
+
+import cc.carm.lib.configuration.core.source.ConfigurationProvider;
+import cc.carm.lib.configuration.core.value.ConfigValue;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public abstract class CommonConfigBuilder>
+ extends AbstractConfigBuilder> {
+
+ protected @Nullable ConfigurationProvider> provider;
+ protected @Nullable String path;
+
+ protected @NotNull String[] comments = new String[0];
+ protected @Nullable T defaultValue;
+
+ public CommonConfigBuilder() {
+ super(ConfigurationProvider.class);
+ }
+
+ protected abstract @NotNull B getThis();
+
+ public abstract @NotNull ConfigValue> build();
+
+ public @NotNull B from(@Nullable ConfigurationProvider> provider) {
+ this.provider = provider;
+ return getThis();
+ }
+
+ public @NotNull B path(@Nullable String path) {
+ this.path = path;
+ return getThis();
+ }
+
+ public @NotNull B comments(@NotNull String... comments) {
+ this.comments = comments;
+ return getThis();
+ }
+
+ public @NotNull B defaults(@Nullable T defaultValue) {
+ this.defaultValue = defaultValue;
+ return getThis();
+ }
+
+
+}
diff --git a/core/src/main/java/cc/carm/lib/configuration/core/builder/list/SourceListBuilder.java b/core/src/main/java/cc/carm/lib/configuration/core/builder/list/SourceListBuilder.java
index 6d597f0..f7b2693 100644
--- a/core/src/main/java/cc/carm/lib/configuration/core/builder/list/SourceListBuilder.java
+++ b/core/src/main/java/cc/carm/lib/configuration/core/builder/list/SourceListBuilder.java
@@ -1,14 +1,13 @@
package cc.carm.lib.configuration.core.builder.list;
-import cc.carm.lib.configuration.core.builder.AbstractConfigBuilder;
+import cc.carm.lib.configuration.core.builder.CommonConfigBuilder;
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.List;
-public class SourceListBuilder
- extends AbstractConfigBuilder, List> {
+public class SourceListBuilder extends CommonConfigBuilder, SourceListBuilder> {
protected final @NotNull Class sourceClass;
protected @NotNull ConfigDataFunction