Skip to content

Commit 44dea11

Browse files
committed
nicer config backend code
1 parent aaa0fca commit 44dea11

File tree

1 file changed

+19
-19
lines changed

1 file changed

+19
-19
lines changed

src/main/java/com/falsepattern/lib/internal/impl/config/ParsedConfiguration.java

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
5858
public class ParsedConfiguration {
5959
private static final Field propField;
60+
private static final Map<Class<?>, FieldRefConstructor> constructors = new HashMap<>();
6061

6162
static {
6263
try {
@@ -65,6 +66,18 @@ public class ParsedConfiguration {
6566
throw new RuntimeException(e);
6667
}
6768
ReflectionUtil.jailBreak(propField);
69+
constructors.put(Boolean.class, BooleanConfigField::new);
70+
constructors.put(boolean.class, BooleanConfigField::new);
71+
constructors.put(Integer.class, IntConfigField::new);
72+
constructors.put(int.class, IntConfigField::new);
73+
constructors.put(Float.class, FloatConfigField::new);
74+
constructors.put(float.class, FloatConfigField::new);
75+
constructors.put(Double.class, DoubleConfigField::new);
76+
constructors.put(double.class, DoubleConfigField::new);
77+
constructors.put(boolean[].class, BooleanListConfigField::new);
78+
constructors.put(int[].class, IntListConfigField::new);
79+
constructors.put(double[].class, DoubleListConfigField::new);
80+
constructors.put(String[].class, StringListConfigField::new);
6881
}
6982

7083
public final Class<?> configClass;
@@ -170,27 +183,10 @@ public void reloadFields() throws ConfigException, IllegalAccessException {
170183
maxFieldNameLength = Math.max(maxFieldNameLength, field.getName().length());
171184
val fieldClass = field.getType();
172185
val name = field.getName();
173-
if (fieldClass.equals(Boolean.class) || fieldClass.equals(boolean.class)) {
174-
fields.put(name, new BooleanConfigField(field, rawConfig, category));
175-
} else if (fieldClass.equals(Integer.class) || fieldClass.equals(int.class)) {
176-
fields.put(name, new IntConfigField(field, rawConfig, category));
177-
} else if (fieldClass.equals(Float.class) || fieldClass.equals(float.class)) {
178-
//noinspection deprecation
179-
fields.put(name, new FloatConfigField(field, rawConfig, category));
180-
} else if (fieldClass.equals(Double.class) || fieldClass.equals(double.class)) {
181-
fields.put(name, new DoubleConfigField(field, rawConfig, category));
182-
} else if (fieldClass.equals(String.class)) {
183-
fields.put(name, new StringConfigField(field, rawConfig, category));
186+
if (constructors.containsKey(fieldClass)) {
187+
fields.put(name, constructors.get(fieldClass).construct(field, rawConfig, category));
184188
} else if (fieldClass.isEnum()) {
185189
fields.put(name, new EnumConfigField<>(field, rawConfig, category));
186-
} else if (fieldClass.isArray() && fieldClass.getComponentType().equals(boolean.class)) {
187-
fields.put(name, new BooleanListConfigField(field, rawConfig, category));
188-
} else if (fieldClass.isArray() && fieldClass.getComponentType().equals(int.class)) {
189-
fields.put(name, new IntListConfigField(field, rawConfig, category));
190-
} else if (fieldClass.isArray() && fieldClass.getComponentType().equals(double.class)) {
191-
fields.put(name, new DoubleListConfigField(field, rawConfig, category));
192-
} else if (fieldClass.isArray() && fieldClass.getComponentType().equals(String.class)) {
193-
fields.put(name, new StringListConfigField(field, rawConfig, category));
194190
} else {
195191
throw new ConfigException("Illegal config field: " + field.getName() + " in " + configClass.getName() +
196192
": Unsupported type " + fieldClass.getName() +
@@ -226,4 +222,8 @@ public boolean validate(BiConsumer<Class<?>, Field> invalidFieldHandler, boolean
226222
}
227223
return valid;
228224
}
225+
226+
private interface FieldRefConstructor {
227+
AConfigField<?> construct(Field field, Configuration configuration, String category) throws ConfigException;
228+
}
229229
}

0 commit comments

Comments
 (0)