configmanager: write all of our config items to our properties

This commit is contained in:
Andrey Kaipov
2020-10-03 17:56:10 -04:00
parent d13bc058d5
commit 922dd9f5c0

View File

@@ -49,12 +49,16 @@ import java.time.Duration;
import java.time.Instant; import java.time.Instant;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Properties; import java.util.Properties;
import java.util.Stack;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Future; import java.util.concurrent.Future;
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledExecutorService;
@@ -692,7 +696,7 @@ public class ConfigManager
return; return;
} }
for (Method method : clazz.getDeclaredMethods()) for (Method method : getAllDeclaredInterfaceMethods(clazz))
{ {
ConfigItem item = method.getAnnotation(ConfigItem.class); 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<Method> getAllDeclaredInterfaceMethods(Class<?> clazz)
{
Collection<Method> methods = new HashSet<>();
Stack<Class<?>> 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() private void syncLastModified()
{ {
File newestFile; File newestFile;