mirror of
https://github.com/NoCheatPlus/NoCheatPlus.git
synced 2024-12-30 12:27:45 +01:00
Improve ListenerManager cleanup.
This commit is contained in:
parent
8082b3d33d
commit
7968d01259
@ -137,6 +137,7 @@ public class GenericListener<E extends Event> implements Listener, EventExecutor
|
|||||||
public void addMethodEntry(final MethodEntry entry){
|
public void addMethodEntry(final MethodEntry entry){
|
||||||
// TODO: maybe optimize later.
|
// TODO: maybe optimize later.
|
||||||
// MethodOrder: the new enties order will be compared versus the old entries tags, not the other way round !).
|
// MethodOrder: the new enties order will be compared versus the old entries tags, not the other way round !).
|
||||||
|
final MethodEntry[] entries = this.entries;
|
||||||
int insertion = -1;
|
int insertion = -1;
|
||||||
if (entry.order != null){
|
if (entry.order != null){
|
||||||
if (entry.order.beforeTag != null){
|
if (entry.order.beforeTag != null){
|
||||||
@ -156,12 +157,13 @@ public class GenericListener<E extends Event> implements Listener, EventExecutor
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
final MethodEntry[] newEntries;
|
||||||
if (insertion == entries.length || insertion == -1){
|
if (insertion == entries.length || insertion == -1){
|
||||||
entries = Arrays.copyOf(entries, entries.length + 1);
|
newEntries = Arrays.copyOf(entries, entries.length + 1);
|
||||||
entries[entries.length - 1] = entry;
|
newEntries[entries.length - 1] = entry;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
MethodEntry[] newEntries = new MethodEntry[entries.length + 1];
|
newEntries = new MethodEntry[entries.length + 1];
|
||||||
for (int i = 0; i < entries.length + 1; i ++ ){
|
for (int i = 0; i < entries.length + 1; i ++ ){
|
||||||
if (i < insertion) newEntries[i] = entries[i];
|
if (i < insertion) newEntries[i] = entries[i];
|
||||||
else if (i == insertion) newEntries[i] = entry;
|
else if (i == insertion) newEntries[i] = entry;
|
||||||
@ -170,9 +172,9 @@ public class GenericListener<E extends Event> implements Listener, EventExecutor
|
|||||||
newEntries[i] = entries[i - 1];
|
newEntries[i] = entries[i - 1];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
entries = newEntries;
|
|
||||||
}
|
}
|
||||||
|
Arrays.fill(entries, null);
|
||||||
|
this.entries = newEntries;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -180,13 +182,27 @@ public class GenericListener<E extends Event> implements Listener, EventExecutor
|
|||||||
* @param listener
|
* @param listener
|
||||||
*/
|
*/
|
||||||
public void remove(Listener listener) {
|
public void remove(Listener listener) {
|
||||||
List<MethodEntry> keep = new ArrayList<MethodEntry>(entries.length);
|
final MethodEntry[] entries = this.entries;
|
||||||
|
final List<MethodEntry> keep = new ArrayList<MethodEntry>(entries.length);
|
||||||
for (MethodEntry entry : entries){
|
for (MethodEntry entry : entries){
|
||||||
if (entry.listener != listener) keep.add(entry);
|
if (entry.listener != listener) keep.add(entry);
|
||||||
}
|
}
|
||||||
if (keep.size() != entries.length){
|
if (keep.size() != entries.length){
|
||||||
entries = new MethodEntry[keep.size()];
|
final MethodEntry[] newEntries = new MethodEntry[keep.size()];
|
||||||
keep.toArray(entries);
|
keep.toArray(newEntries);
|
||||||
|
Arrays.fill(entries, null);
|
||||||
|
this.entries = newEntries;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove all MethodEntry references.
|
||||||
|
*/
|
||||||
|
public void clear() {
|
||||||
|
MethodEntry[] oldEntries = this.entries;
|
||||||
|
this.entries = new MethodEntry[0];
|
||||||
|
for (int i = 0; i < oldEntries.length; i++){
|
||||||
|
oldEntries[i] = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -40,7 +40,8 @@ public class ListenerManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Probably put to protected later.
|
* Probably put to protected later.<br>
|
||||||
|
* NOTE: Not thread-safe.
|
||||||
* @param clazz
|
* @param clazz
|
||||||
* @param priority
|
* @param priority
|
||||||
* @return
|
* @return
|
||||||
@ -89,6 +90,11 @@ public class ListenerManager {
|
|||||||
* Clear internal mappings.
|
* Clear internal mappings.
|
||||||
*/
|
*/
|
||||||
public void clear(){
|
public void clear(){
|
||||||
|
for (final Map<EventPriority, GenericListener<?>> prioMap : map.values()){
|
||||||
|
for (final GenericListener<?> listener : prioMap.values()){
|
||||||
|
listener.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
map.clear();
|
map.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user