Fixed an issue where RegisteredCommand mutates the scopes required pe… (#190)

…rmissions and added caching to RegisteredCommand permissions
This commit is contained in:
Xavier
2019-02-14 16:33:34 -05:00
committed by Daniel Ennis
parent 40b1acebde
commit 8db8d8b183
2 changed files with 13 additions and 8 deletions
@@ -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)));
@@ -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 <CEC extends CommandExecutionContext<CEC, ? exten
final int doesNotConsumeInputResolvers;
final int optionalResolvers;
final Set<String> 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 <CEC extends CommandExecutionContext<CEC, ? exten
this.consumeInputResolvers = consumeInputResolvers;
this.doesNotConsumeInputResolvers = doesNotConsumeInputResolvers;
this.optionalResolvers = optionalResolvers;
this.computePermissions();
}
@@ -282,12 +284,16 @@ public class RegisteredCommand <CEC extends CommandExecutionContext<CEC, ? exten
return ACFPatterns.COMMA.split(this.permission)[0];
}
public Set<String> getRequiredPermissions() {
Set<String> 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<String> getRequiredPermissions() {
return this.permissions;
}
public boolean requiresPermission(String permission) {