mirror of
https://github.com/aikar/commands.git
synced 2026-05-31 06:11:55 +00:00
Fixed an issue where RegisteredCommand mutates the scopes required pe… (#190)
…rmissions and added caching to RegisteredCommand permissions
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user