eventbus: preserve priority ordering during unregister
This commit is contained in:
@@ -26,9 +26,8 @@
|
|||||||
package net.runelite.client.eventbus;
|
package net.runelite.client.eventbus;
|
||||||
|
|
||||||
import com.google.common.base.Preconditions;
|
import com.google.common.base.Preconditions;
|
||||||
import com.google.common.collect.HashMultimap;
|
|
||||||
import com.google.common.collect.ImmutableMultimap;
|
import com.google.common.collect.ImmutableMultimap;
|
||||||
import com.google.common.collect.Multimap;
|
import com.google.common.collect.Iterables;
|
||||||
import java.lang.invoke.CallSite;
|
import java.lang.invoke.CallSite;
|
||||||
import java.lang.invoke.LambdaMetafactory;
|
import java.lang.invoke.LambdaMetafactory;
|
||||||
import java.lang.invoke.MethodHandle;
|
import java.lang.invoke.MethodHandle;
|
||||||
@@ -186,26 +185,10 @@ public class EventBus
|
|||||||
*/
|
*/
|
||||||
public synchronized void unregister(@Nonnull final Object object)
|
public synchronized void unregister(@Nonnull final Object object)
|
||||||
{
|
{
|
||||||
final Multimap<Class<?>, Subscriber> map = HashMultimap.create();
|
subscribers = ImmutableMultimap.copyOf(Iterables.filter(
|
||||||
map.putAll(subscribers);
|
subscribers.entries(),
|
||||||
|
e -> e.getValue().getObject() != object
|
||||||
for (Class<?> clazz = object.getClass(); clazz != null; clazz = clazz.getSuperclass())
|
));
|
||||||
{
|
|
||||||
for (final Method method : clazz.getDeclaredMethods())
|
|
||||||
{
|
|
||||||
final Subscribe sub = method.getAnnotation(Subscribe.class);
|
|
||||||
|
|
||||||
if (sub == null)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
final Class<?> parameterClazz = method.getParameterTypes()[0];
|
|
||||||
map.remove(parameterClazz, new Subscriber(object, method, sub.priority(), null));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
subscribers = ImmutableMultimap.copyOf(map);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void unregister(Subscriber sub)
|
public synchronized void unregister(Subscriber sub)
|
||||||
@@ -215,12 +198,10 @@ public class EventBus
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final Multimap<Class<?>, Subscriber> map = HashMultimap.create();
|
subscribers = ImmutableMultimap.copyOf(Iterables.filter(
|
||||||
map.putAll(subscribers);
|
subscribers.entries(),
|
||||||
|
e -> sub != e.getValue()
|
||||||
map.values().remove(sub);
|
));
|
||||||
|
|
||||||
subscribers = ImmutableMultimap.copyOf(map);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user