From 922dd9f5c05140794c78198c2e939707e40322f9 Mon Sep 17 00:00:00 2001 From: Andrey Kaipov Date: Sat, 3 Oct 2020 17:56:10 -0400 Subject: [PATCH] configmanager: write all of our config items to our properties --- .../runelite/client/config/ConfigManager.java | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java b/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java index 3643bb392a..bc933f6eeb 100644 --- a/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java +++ b/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java @@ -49,12 +49,16 @@ import java.time.Duration; import java.time.Instant; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; import java.util.EnumSet; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Properties; +import java.util.Stack; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Future; import java.util.concurrent.ScheduledExecutorService; @@ -692,7 +696,7 @@ public class ConfigManager return; } - for (Method method : clazz.getDeclaredMethods()) + for (Method method : getAllDeclaredInterfaceMethods(clazz)) { ConfigItem item = method.getAnnotation(ConfigItem.class); @@ -810,6 +814,25 @@ public class ConfigManager } } + /** + * Does DFS on a class's interfaces to find all of its implemented methods. + */ + private Collection getAllDeclaredInterfaceMethods(Class clazz) + { + Collection methods = new HashSet<>(); + Stack> interfazes = new Stack<>(); + interfazes.push(clazz); + + while (!interfazes.isEmpty()) + { + Class interfaze = interfazes.pop(); + Collections.addAll(methods, interfaze.getDeclaredMethods()); + Collections.addAll(interfazes, interfaze.getInterfaces()); + } + + return methods; + } + private void syncLastModified() { File newestFile;