From 18e126b7817a5b9a904ddc3dca7ea986551c0b95 Mon Sep 17 00:00:00 2001 From: Luck Date: Sun, 2 Oct 2016 10:33:58 +0100 Subject: [PATCH] Fix issue with permissions sometimes not being removed --- .../luckperms/core/PermissionHolder.java | 77 ++++++------------- 1 file changed, 24 insertions(+), 53 deletions(-) diff --git a/common/src/main/java/me/lucko/luckperms/core/PermissionHolder.java b/common/src/main/java/me/lucko/luckperms/core/PermissionHolder.java index ecb0c9117..730488303 100644 --- a/common/src/main/java/me/lucko/luckperms/core/PermissionHolder.java +++ b/common/src/main/java/me/lucko/luckperms/core/PermissionHolder.java @@ -111,31 +111,28 @@ public abstract class PermissionHolder { * @return true if permissions had expired and were removed */ public boolean auditTemporaryPermissions() { - boolean work = false; + final boolean[] work = {false}; + final PermissionHolder instance = this; - Iterator iterator = nodes.iterator(); - while (iterator.hasNext()) { - Node element = iterator.next(); - if (element.hasExpired()) { - iterator.remove(); - - work = true; - plugin.getApiProvider().fireEventAsync(new PermissionNodeExpireEvent(new PermissionHolderLink(this), element)); + nodes.removeIf(node -> { + if (node.hasExpired()) { + work[0] = true; + plugin.getApiProvider().fireEventAsync(new PermissionNodeExpireEvent(new PermissionHolderLink(instance), node)); + return true; } - } + return false; + }); - Iterator iterator2 = transientNodes.iterator(); - while (iterator2.hasNext()) { - Node element = iterator2.next(); - if (element.hasExpired()) { - iterator2.remove(); - - work = true; - plugin.getApiProvider().fireEventAsync(new PermissionNodeExpireEvent(new PermissionHolderLink(this), element)); + transientNodes.removeIf(node -> { + if (node.hasExpired()) { + work[0] = true; + plugin.getApiProvider().fireEventAsync(new PermissionNodeExpireEvent(new PermissionHolderLink(instance), node)); + return true; } - } + return false; + }); - return work; + return work[0]; } /** @@ -163,25 +160,11 @@ public abstract class PermissionHolder { contexts.remove("server"); contexts.remove("world"); - Iterator iterator = parents.iterator(); - while (iterator.hasNext()) { - Node node = iterator.next(); - - if (!node.shouldApplyOnServer(server, context.isApplyGlobalGroups(), plugin.getConfiguration().isApplyingRegex())) { - iterator.remove(); - continue; - } - - if (!node.shouldApplyOnWorld(world, context.isApplyGlobalWorldGroups(), plugin.getConfiguration().isApplyingRegex())) { - iterator.remove(); - continue; - } - - if (!node.shouldApplyWithContext(contexts, false)) { - iterator.remove(); - continue; - } - } + parents.removeIf(node -> + !node.shouldApplyOnServer(server, context.isApplyGlobalGroups(), plugin.getConfiguration().isApplyingRegex()) || + !node.shouldApplyOnWorld(world, context.isApplyGlobalWorldGroups(), plugin.getConfiguration().isApplyingRegex()) || + !node.shouldApplyWithContext(contexts, false) + ); for (Node parent : parents) { Group group = plugin.getGroupManager().get(parent.getGroupName()); @@ -488,13 +471,7 @@ public abstract class PermissionHolder { throw new ObjectLacksException(); } - Iterator iterator = nodes.iterator(); - while (iterator.hasNext()) { - Node entry = iterator.next(); - if (entry.almostEquals(node)) { - iterator.remove(); - } - } + nodes.removeIf(e -> e.almostEquals(node)); if (node.isGroupNode()) { plugin.getApiProvider().fireEventAsync(new GroupRemoveEvent(new PermissionHolderLink(this), @@ -514,13 +491,7 @@ public abstract class PermissionHolder { throw new ObjectLacksException(); } - Iterator iterator = transientNodes.iterator(); - while (iterator.hasNext()) { - Node entry = iterator.next(); - if (entry.almostEquals(node)) { - iterator.remove(); - } - } + transientNodes.removeIf(e -> e.almostEquals(node)); if (node.isGroupNode()) { plugin.getApiProvider().fireEventAsync(new GroupRemoveEvent(new PermissionHolderLink(this),