mirror of
https://github.com/OMGeeky/andors-trail.git
synced 2026-01-21 10:58:12 +01:00
synchronized listeners to prevent crashs
This commit is contained in:
@@ -8,7 +8,7 @@ import com.gpl.rpg.AndorsTrail.AndorsTrailApplication;
|
||||
public class ListOfListeners<T> {
|
||||
private final ArrayList<WeakReference<T>> listeners = new ArrayList<WeakReference<T>>();
|
||||
|
||||
public final void add(T listener) {
|
||||
public synchronized final void add(T listener) {
|
||||
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
|
||||
for (WeakReference<T> ref : listeners) {
|
||||
if (ref.get() == listener) {
|
||||
@@ -18,7 +18,7 @@ public class ListOfListeners<T> {
|
||||
}
|
||||
listeners.add(new WeakReference<T>(listener));
|
||||
}
|
||||
public final void remove(T listenerToRemove) {
|
||||
public synchronized final void remove(T listenerToRemove) {
|
||||
for (int i = listeners.size()-1; i >= 0; --i) {
|
||||
T listener = listeners.get(i).get();
|
||||
if (listener == null || listener == listenerToRemove) {
|
||||
@@ -26,32 +26,32 @@ public class ListOfListeners<T> {
|
||||
}
|
||||
}
|
||||
}
|
||||
public final void clear() {
|
||||
public synchronized final void clear() {
|
||||
listeners.clear();
|
||||
}
|
||||
|
||||
protected final void callAllListeners(Function<T> e) {
|
||||
protected synchronized final void callAllListeners(Function<T> e) {
|
||||
for (int i = listeners.size()-1; i >= 0; --i) {
|
||||
T listener = listeners.get(i).get();
|
||||
if (listener == null) listeners.remove(i);
|
||||
else e.call(listener);
|
||||
}
|
||||
}
|
||||
protected final <Arg1> void callAllListeners(Function1<T, Arg1> e, Arg1 arg) {
|
||||
protected synchronized final <Arg1> void callAllListeners(Function1<T, Arg1> e, Arg1 arg) {
|
||||
for (int i = listeners.size()-1; i >= 0; --i) {
|
||||
T listener = listeners.get(i).get();
|
||||
if (listener == null) listeners.remove(i);
|
||||
else e.call(listener, arg);
|
||||
}
|
||||
}
|
||||
protected final <Arg1, Arg2> void callAllListeners(Function2<T, Arg1, Arg2> e, Arg1 arg1, Arg2 arg2) {
|
||||
protected synchronized final <Arg1, Arg2> void callAllListeners(Function2<T, Arg1, Arg2> e, Arg1 arg1, Arg2 arg2) {
|
||||
for (int i = listeners.size()-1; i >= 0; --i) {
|
||||
T listener = listeners.get(i).get();
|
||||
if (listener == null) listeners.remove(i);
|
||||
else e.call(listener, arg1, arg2);
|
||||
}
|
||||
}
|
||||
protected final <Arg1, Arg2, Arg3> void callAllListeners(Function3<T, Arg1, Arg2, Arg3> e, Arg1 arg1, Arg2 arg2, Arg3 arg3) {
|
||||
protected synchronized final <Arg1, Arg2, Arg3> void callAllListeners(Function3<T, Arg1, Arg2, Arg3> e, Arg1 arg1, Arg2 arg2, Arg3 arg3) {
|
||||
for (int i = listeners.size()-1; i >= 0; --i) {
|
||||
T listener = listeners.get(i).get();
|
||||
if (listener == null) listeners.remove(i);
|
||||
|
||||
Reference in New Issue
Block a user