Skip to content

Commit b6b9373

Browse files
committed
feat: Add warnForPrivateFields options
1 parent 3c6c32e commit b6b9373

File tree

4 files changed

+25
-8
lines changed

4 files changed

+25
-8
lines changed

common/src/main/java/io/github/notenoughupdates/moulconfig/processor/BuiltinMoulConfigGuis.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,8 @@ public static void addProcessors(MoulConfigProcessor<?> processor) {
5757
processor.registerConfigEditor(ConfigLink.class, ((option, configLink) -> {
5858
Field field;
5959
try {
60-
field = configLink.owner().getField(configLink.field());
60+
field = configLink.owner().getDeclaredField(configLink.field());
61+
field.setAccessible(true);
6162
} catch (NoSuchFieldException e) {
6263
throw new RuntimeException(e);
6364
}

common/src/main/java/io/github/notenoughupdates/moulconfig/processor/ConfigProcessorDriver.java

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,26 @@
2222

2323
import com.google.gson.annotations.Expose;
2424
import io.github.notenoughupdates.moulconfig.Config;
25-
import io.github.notenoughupdates.moulconfig.annotations.*;
25+
import io.github.notenoughupdates.moulconfig.annotations.Accordion;
26+
import io.github.notenoughupdates.moulconfig.annotations.Category;
27+
import io.github.notenoughupdates.moulconfig.annotations.ConfigAccordionId;
28+
import io.github.notenoughupdates.moulconfig.annotations.ConfigEditorAccordion;
29+
import io.github.notenoughupdates.moulconfig.annotations.ConfigEditorButton;
30+
import io.github.notenoughupdates.moulconfig.annotations.ConfigEditorInfoText;
31+
import io.github.notenoughupdates.moulconfig.annotations.ConfigOption;
2632
import io.github.notenoughupdates.moulconfig.internal.BoundField;
2733
import io.github.notenoughupdates.moulconfig.internal.Warnings;
2834
import lombok.var;
2935

3036
import java.lang.annotation.Annotation;
3137
import java.lang.reflect.Field;
3238
import java.lang.reflect.Modifier;
33-
import java.util.*;
39+
import java.util.ArrayList;
40+
import java.util.Arrays;
41+
import java.util.HashSet;
42+
import java.util.List;
43+
import java.util.Set;
44+
import java.util.Stack;
3445

3546
public class ConfigProcessorDriver {
3647
private final List<Class<? extends Annotation>> nonStoredConfigOptions = Arrays.asList(
@@ -40,6 +51,8 @@ public class ConfigProcessorDriver {
4051

4152
public final ConfigStructureReader reader;
4253

54+
public boolean warnForPrivateFields = true;
55+
4356
public int nextAnnotation = 1000000000;
4457

4558
public boolean checkExpose = true;
@@ -67,14 +80,15 @@ public void processCategory(Object categoryObject,
6780
ConfigOption optionAnnotation = field.getAnnotation(ConfigOption.class);
6881
if (optionAnnotation == null) continue;
6982
if (checkExpose && field.getAnnotation(Expose.class) == null
70-
&& (field.getModifiers() & Modifier.TRANSIENT) == 0
71-
&& nonStoredConfigOptions.stream().noneMatch(field::isAnnotationPresent)) {
83+
&& (field.getModifiers() & Modifier.TRANSIENT) == 0
84+
&& nonStoredConfigOptions.stream().noneMatch(field::isAnnotationPresent)) {
7285
Warnings.warn("Non transient @ConfigOption without @Expose in " + categoryClass + " on field " + field);
7386
}
7487

7588
if ((field.getModifiers() & Modifier.PUBLIC) != Modifier.PUBLIC) {
7689
field.setAccessible(true);
77-
Warnings.warn("@ConfigOption on non public field " + field + " in " + categoryClass);
90+
if (warnForPrivateFields)
91+
Warnings.warn("@ConfigOption on non public field " + field + " in " + categoryClass);
7892
}
7993

8094
ConfigAccordionId parentAccordion = field.getAnnotation(ConfigAccordionId.class);
@@ -146,7 +160,8 @@ private void processCategoryMeta(
146160
}
147161
if ((categoryField.getModifiers() & Modifier.PUBLIC) != Modifier.PUBLIC) {
148162
categoryField.setAccessible(true);
149-
Warnings.warn("@Category on non public field " + categoryField + " in " + parent.getClass());
163+
if (warnForPrivateFields)
164+
Warnings.warn("@Category on non public field " + categoryField + " in " + parent.getClass());
150165
}
151166
var deferredSubCategories = new ArrayList<BoundField>();
152167
reader.beginCategory(parent, categoryField, categoryAnnotation.name(), categoryAnnotation.desc());

legacy/src/main/java/io/github/notenoughupdates/moulconfig/test/MoulConfigTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ public void init(FMLInitializationEvent event) {
8484
BuiltinMoulConfigGuis.addProcessors(processor);
8585
ConfigProcessorDriver driver = new ConfigProcessorDriver(processor);
8686
driver.checkExpose = false;
87+
driver.warnForPrivateFields = false;
8788
driver.processConfig(testConfig);
8889
testConfig.testCategory.text2.whenChanged((oldValue, newValue) ->
8990
Minecraft.getMinecraft().thePlayer.addChatMessage(

legacy/src/main/java/io/github/notenoughupdates/moulconfig/test/SubCategory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public class SubCategory {
1313
name = "Test Opt",
1414
desc = "com"
1515
)
16-
public boolean testOption = false;
16+
private boolean testOption = false;
1717
@ConfigAccordionId(id = 1)
1818
@Expose
1919
@ConfigOption(

0 commit comments

Comments
 (0)