From 8db8d8b183cbcf34d1d9ce1e028df7a894b29fe8 Mon Sep 17 00:00:00 2001 From: Xavier Date: Thu, 14 Feb 2019 16:33:34 -0500 Subject: [PATCH] =?UTF-8?q?Fixed=20an=20issue=20where=20RegisteredCommand?= =?UTF-8?q?=20mutates=20the=20scopes=20required=20pe=E2=80=A6=20(#190)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit …rmissions and added caching to RegisteredCommand permissions --- .../main/java/co/aikar/commands/BaseCommand.java | 5 ++--- .../co/aikar/commands/RegisteredCommand.java | 16 +++++++++++----- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/core/src/main/java/co/aikar/commands/BaseCommand.java b/core/src/main/java/co/aikar/commands/BaseCommand.java index 20de1233..4a8f6a16 100644 --- a/core/src/main/java/co/aikar/commands/BaseCommand.java +++ b/core/src/main/java/co/aikar/commands/BaseCommand.java @@ -44,7 +44,6 @@ import java.lang.reflect.Method; import java.lang.reflect.Parameter; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; @@ -253,7 +252,7 @@ public abstract class BaseCommand { this.conditions = annotations.getAnnotationValue(self, Conditions.class, Annotations.REPLACEMENTS | Annotations.NO_EMPTY); registerSubcommands(); - registerPermissions(); + computePermissions(); registerSubclasses(cmd); if (cmdAliases != null) { @@ -378,7 +377,7 @@ public abstract class BaseCommand { /** * This registers all the permissions required to execute this command. */ - private void registerPermissions() { + private void computePermissions() { this.permissions.clear(); if (this.permission != null && !this.permission.isEmpty()) { this.permissions.addAll(Arrays.asList(ACFPatterns.COMMA.split(this.permission))); diff --git a/core/src/main/java/co/aikar/commands/RegisteredCommand.java b/core/src/main/java/co/aikar/commands/RegisteredCommand.java index a57fdd6f..e592b2e3 100644 --- a/core/src/main/java/co/aikar/commands/RegisteredCommand.java +++ b/core/src/main/java/co/aikar/commands/RegisteredCommand.java @@ -40,7 +40,6 @@ import java.lang.reflect.Parameter; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; -import java.util.Collections; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; @@ -72,6 +71,8 @@ public class RegisteredCommand permissions = new HashSet<>(); + RegisteredCommand(BaseCommand scope, String command, Method method, String prefSubCommand) { this.scope = scope; this.manager = this.scope.manager; @@ -131,6 +132,7 @@ public class RegisteredCommand getRequiredPermissions() { - Set permissions = scope.getRequiredPermissions(); + private void computePermissions() { + this.permissions.clear(); + this.permissions.addAll(this.scope.getRequiredPermissions()); if (this.permission != null && !this.permission.isEmpty()) { - permissions.addAll(Arrays.asList(ACFPatterns.COMMA.split(this.permission))); + this.permissions.addAll(Arrays.asList(ACFPatterns.COMMA.split(this.permission))); } - return permissions; + } + + public Set getRequiredPermissions() { + return this.permissions; } public boolean requiresPermission(String permission) {