Fix CommandCompletionContext.getResolvedArg (#266)

This commit is contained in:
JOO200
2020-08-14 00:36:54 +02:00
committed by GitHub
parent 9188892e3b
commit 9a04899978
2 changed files with 9 additions and 8 deletions
@@ -101,9 +101,13 @@ public class CommandCompletionContext<I extends CommandIssuer> {
throw new IllegalStateException("Can not find any parameter that can satisfy " + clazz.getName());
}
}
return getContextValueByName(clazz, name);
}
public <T> T getContextValueByName(Class<? extends T> clazz, String name) throws InvalidCommandArgument {
//noinspection unchecked
Map<String, Object> resolved = command.resolveContexts(issuer, args, args.size() - 1);
if (resolved == null || paramIdx > resolved.size()) {
Map<String, Object> resolved = command.resolveContexts(issuer, args, name);
if (resolved == null || !resolved.containsKey(name)) {
ACFUtil.sneaky(new CommandCompletionTextLookupException());
}
@@ -215,23 +215,20 @@ public class RegisteredCommand<CEC extends CommandExecutionContext<CEC, ? extend
@Nullable
Map<String, Object> resolveContexts(CommandIssuer sender, List<String> args) throws InvalidCommandArgument {
return resolveContexts(sender, args, parameters.length);
return resolveContexts(sender, args, null);
}
@Nullable
Map<String, Object> resolveContexts(CommandIssuer sender, List<String> args, int argLimit) throws InvalidCommandArgument {
Map<String, Object> resolveContexts(CommandIssuer sender, List<String> args, String name) throws InvalidCommandArgument {
args = new ArrayList<>(args);
String[] origArgs = args.toArray(new String[args.size()]);
Map<String, Object> passedArgs = new LinkedHashMap<>();
int remainingRequired = requiredResolvers;
CommandOperationContext opContext = CommandManager.getCurrentCommandOperationContext();
for (int i = 0; i < parameters.length && i < argLimit; i++) {
for (int i = 0; i < parameters.length && (name == null || !passedArgs.containsKey(name)); i++) {
boolean isLast = i == parameters.length - 1;
boolean allowOptional = remainingRequired == 0;
final CommandParameter<CEC> parameter = parameters[i];
if (!parameter.canConsumeInput()) {
argLimit++;
}
final String parameterName = parameter.getName();
final Class<?> type = parameter.getType();
//noinspection unchecked