Browse Source

Support static listeners

Lortseam 4 years ago
parent
commit
85811595a4

+ 4 - 2
src/main/java/me/lortseam/completeconfig/data/Entry.java

@@ -1,5 +1,7 @@
 package me.lortseam.completeconfig.data;
 
+import com.google.common.collect.BiMap;
+import com.google.common.collect.HashBiMap;
 import com.google.common.collect.Lists;
 import lombok.*;
 import lombok.extern.log4j.Log4j2;
@@ -49,7 +51,7 @@ public class Entry<T> extends EntryBase<T> implements DataPart {
             Transformation.ofAnnotation(ConfigEntry.Color.class, origin -> new ColorEntry<>(origin, origin.getAnnotation().alphaMode())),
             Transformation.ofType(TextColor.class, origin -> new ColorEntry<>(origin, false))
     );
-    private static final Map<Key, EntryBase> entries = new HashMap<>();
+    private static final BiMap<Key, EntryBase> entries = HashBiMap.create();
 
     static {
         CompleteConfig.getExtensions().stream().map(CompleteConfigExtension::getTransformations).filter(Objects::nonNull).forEach(extensionTransformations -> {
@@ -267,7 +269,7 @@ public class Entry<T> extends EntryBase<T> implements DataPart {
             for (Consumer<Entry<T>> interaction : interactions) {
                 interaction.accept(entry);
             }
-            entries.put(new Key(field, parentObject.getClass()), entry);
+            entries.put(entries.inverse().get(this), entry);
             return entry;
         }
 

+ 3 - 3
src/main/java/me/lortseam/completeconfig/data/EntryMap.java

@@ -39,12 +39,12 @@ public class EntryMap extends ConfigMap<Entry> {
                 if (!field.isAccessible()) {
                     field.setAccessible(true);
                 }
-                Entry<?> entry = Entry.Draft.of(field, container.getClass()).build(container, translation);
+                Entry<?> entry = Entry.Draft.of(field, container.getClass()).build(Modifier.isStatic(field.getModifiers()) ? null : container, translation);
                 entry.resolve(field);
                 clazzEntries.add(entry);
             });
             containerEntries.addAll(0, clazzEntries);
-            Arrays.stream(clazz.getDeclaredMethods()).filter(method -> !Modifier.isStatic(method.getModifiers()) && method.isAnnotationPresent(ConfigEntryListener.class)).forEach(method -> {
+            Arrays.stream(clazz.getDeclaredMethods()).filter(method -> (clazz == container.getClass() || !Modifier.isStatic(method.getModifiers())) && method.isAnnotationPresent(ConfigEntryListener.class)).forEach(method -> {
                 ConfigEntryListener listener = method.getDeclaredAnnotation(ConfigEntryListener.class);
                 String fieldName = listener.value();
                 if (fieldName.equals("")) {
@@ -70,7 +70,7 @@ public class EntryMap extends ConfigMap<Entry> {
                 if (!method.isAccessible()) {
                     method.setAccessible(true);
                 }
-                entry.interact(e -> e.addListener(method, container));
+                entry.interact(e -> e.addListener(method, Modifier.isStatic(method.getModifiers()) ? null : container));
             });
         }
         for (Entry<?> entry : containerEntries) {