Allow parser parameter annotations for flags as well (#315)
This commit is contained in:
parent
b111b8996c
commit
526ef2af61
2 changed files with 27 additions and 13 deletions
|
|
@ -28,14 +28,15 @@ import cloud.commandframework.CommandManager;
|
||||||
import cloud.commandframework.arguments.CommandArgument;
|
import cloud.commandframework.arguments.CommandArgument;
|
||||||
import cloud.commandframework.arguments.flags.CommandFlag;
|
import cloud.commandframework.arguments.flags.CommandFlag;
|
||||||
import cloud.commandframework.arguments.parser.ArgumentParser;
|
import cloud.commandframework.arguments.parser.ArgumentParser;
|
||||||
import cloud.commandframework.arguments.parser.ParserParameters;
|
|
||||||
import cloud.commandframework.arguments.parser.ParserRegistry;
|
import cloud.commandframework.arguments.parser.ParserRegistry;
|
||||||
import cloud.commandframework.permission.Permission;
|
import cloud.commandframework.permission.Permission;
|
||||||
import io.leangen.geantyref.TypeToken;
|
import io.leangen.geantyref.TypeToken;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
|
import java.lang.annotation.Annotation;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.lang.reflect.Parameter;
|
import java.lang.reflect.Parameter;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -67,13 +68,15 @@ final class FlagExtractor implements Function<@NonNull Method, Collection<@NonNu
|
||||||
if (parameter.getType().equals(boolean.class)) {
|
if (parameter.getType().equals(boolean.class)) {
|
||||||
flags.add(builder.build());
|
flags.add(builder.build());
|
||||||
} else {
|
} else {
|
||||||
|
final TypeToken<?> token = TypeToken.get(parameter.getType());
|
||||||
|
final Collection<Annotation> annotations = Arrays.asList(parameter.getAnnotations());
|
||||||
final ParserRegistry<?> registry = this.commandManager.getParserRegistry();
|
final ParserRegistry<?> registry = this.commandManager.getParserRegistry();
|
||||||
final ArgumentParser<?, ?> parser;
|
final ArgumentParser<?, ?> parser;
|
||||||
if (flag.parserName().isEmpty()) {
|
if (flag.parserName().isEmpty()) {
|
||||||
parser = registry.createParser(TypeToken.get(parameter.getType()), ParserParameters.empty())
|
parser = registry.createParser(token, registry.parseAnnotations(token, annotations))
|
||||||
.orElse(null);
|
.orElse(null);
|
||||||
} else {
|
} else {
|
||||||
parser = registry.createParser(flag.parserName(), ParserParameters.empty())
|
parser = registry.createParser(flag.parserName(), registry.parseAnnotations(token, annotations))
|
||||||
.orElse(null);
|
.orElse(null);
|
||||||
}
|
}
|
||||||
if (parser == null) {
|
if (parser == null) {
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,8 @@ package cloud.commandframework.annotations;
|
||||||
import cloud.commandframework.Command;
|
import cloud.commandframework.Command;
|
||||||
import cloud.commandframework.CommandManager;
|
import cloud.commandframework.CommandManager;
|
||||||
import cloud.commandframework.annotations.parsers.Parser;
|
import cloud.commandframework.annotations.parsers.Parser;
|
||||||
|
import cloud.commandframework.annotations.specifier.Greedy;
|
||||||
|
import cloud.commandframework.annotations.specifier.Quoted;
|
||||||
import cloud.commandframework.annotations.specifier.Range;
|
import cloud.commandframework.annotations.specifier.Range;
|
||||||
import cloud.commandframework.annotations.suggestions.Suggestions;
|
import cloud.commandframework.annotations.suggestions.Suggestions;
|
||||||
import cloud.commandframework.arguments.StaticArgument;
|
import cloud.commandframework.arguments.StaticArgument;
|
||||||
|
|
@ -37,30 +39,28 @@ import cloud.commandframework.context.CommandContext;
|
||||||
import cloud.commandframework.meta.SimpleCommandMeta;
|
import cloud.commandframework.meta.SimpleCommandMeta;
|
||||||
import io.leangen.geantyref.TypeToken;
|
import io.leangen.geantyref.TypeToken;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashSet;
|
|
||||||
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import org.junit.jupiter.api.Assertions;
|
|
||||||
import org.junit.jupiter.api.BeforeAll;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import org.junit.jupiter.api.TestInstance;
|
|
||||||
|
|
||||||
import java.lang.annotation.ElementType;
|
import java.lang.annotation.ElementType;
|
||||||
import java.lang.annotation.Retention;
|
import java.lang.annotation.Retention;
|
||||||
import java.lang.annotation.RetentionPolicy;
|
import java.lang.annotation.RetentionPolicy;
|
||||||
import java.lang.annotation.Target;
|
import java.lang.annotation.Target;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Queue;
|
import java.util.Queue;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.concurrent.CompletionException;
|
import java.util.concurrent.CompletionException;
|
||||||
import java.util.function.BiFunction;
|
import java.util.function.BiFunction;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Assertions;
|
||||||
|
import org.junit.jupiter.api.BeforeAll;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.TestInstance;
|
||||||
|
|
||||||
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
|
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
|
||||||
class AnnotationParserTest {
|
class AnnotationParserTest {
|
||||||
|
|
||||||
|
|
@ -107,6 +107,8 @@ class AnnotationParserTest {
|
||||||
manager.executeCommand(new TestCommandSender(), "test 101").join());
|
manager.executeCommand(new TestCommandSender(), "test 101").join());
|
||||||
manager.executeCommand(new TestCommandSender(), "flagcommand -p").join();
|
manager.executeCommand(new TestCommandSender(), "flagcommand -p").join();
|
||||||
manager.executeCommand(new TestCommandSender(), "flagcommand --print --word peanut").join();
|
manager.executeCommand(new TestCommandSender(), "flagcommand --print --word peanut").join();
|
||||||
|
manager.executeCommand(new TestCommandSender(), "parserflagcommand -s \"Hello World\"").join();
|
||||||
|
manager.executeCommand(new TestCommandSender(), "parserflagcommand -s \"Hello World\" -o This is a test").join();
|
||||||
manager.executeCommand(new TestCommandSender(), "class method").join();
|
manager.executeCommand(new TestCommandSender(), "class method").join();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -244,6 +246,15 @@ class AnnotationParserTest {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@CommandMethod("parserflagcommand")
|
||||||
|
public void testQuotedFlags(
|
||||||
|
final TestCommandSender sender,
|
||||||
|
@Flag(value = "sentence", aliases = "s") @Quoted final String sentence,
|
||||||
|
@Flag(value = "other", aliases = "o") @Greedy final String otherStuff
|
||||||
|
) {
|
||||||
|
System.out.println(sentence + (otherStuff == null ? "" : " " + otherStuff));
|
||||||
|
}
|
||||||
|
|
||||||
@CommandMethod("namedsuggestions <input>")
|
@CommandMethod("namedsuggestions <input>")
|
||||||
public void testNamedSuggestionProviders(
|
public void testNamedSuggestionProviders(
|
||||||
@Argument(value = "input", suggestions = "some-name") final String argument
|
@Argument(value = "input", suggestions = "some-name") final String argument
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue