Skip to content

Commit e105461

Browse files
authored
Allow parser parameter annotations for flags as well (#315)
1 parent 4844582 commit e105461

2 files changed

Lines changed: 27 additions & 13 deletions

File tree

cloud-annotations/src/main/java/cloud/commandframework/annotations/FlagExtractor.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,15 @@
2828
import cloud.commandframework.arguments.CommandArgument;
2929
import cloud.commandframework.arguments.flags.CommandFlag;
3030
import cloud.commandframework.arguments.parser.ArgumentParser;
31-
import cloud.commandframework.arguments.parser.ParserParameters;
3231
import cloud.commandframework.arguments.parser.ParserRegistry;
3332
import cloud.commandframework.permission.Permission;
3433
import io.leangen.geantyref.TypeToken;
3534
import org.checkerframework.checker.nullness.qual.NonNull;
3635

36+
import java.lang.annotation.Annotation;
3737
import java.lang.reflect.Method;
3838
import java.lang.reflect.Parameter;
39+
import java.util.Arrays;
3940
import java.util.Collection;
4041
import java.util.LinkedList;
4142
import java.util.List;
@@ -67,13 +68,15 @@ final class FlagExtractor implements Function<@NonNull Method, Collection<@NonNu
6768
if (parameter.getType().equals(boolean.class)) {
6869
flags.add(builder.build());
6970
} else {
71+
final TypeToken<?> token = TypeToken.get(parameter.getType());
72+
final Collection<Annotation> annotations = Arrays.asList(parameter.getAnnotations());
7073
final ParserRegistry<?> registry = this.commandManager.getParserRegistry();
7174
final ArgumentParser<?, ?> parser;
7275
if (flag.parserName().isEmpty()) {
73-
parser = registry.createParser(TypeToken.get(parameter.getType()), ParserParameters.empty())
76+
parser = registry.createParser(token, registry.parseAnnotations(token, annotations))
7477
.orElse(null);
7578
} else {
76-
parser = registry.createParser(flag.parserName(), ParserParameters.empty())
79+
parser = registry.createParser(flag.parserName(), registry.parseAnnotations(token, annotations))
7780
.orElse(null);
7881
}
7982
if (parser == null) {

cloud-annotations/src/test/java/cloud/commandframework/annotations/AnnotationParserTest.java

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
import cloud.commandframework.Command;
2727
import cloud.commandframework.CommandManager;
2828
import cloud.commandframework.annotations.parsers.Parser;
29+
import cloud.commandframework.annotations.specifier.Greedy;
30+
import cloud.commandframework.annotations.specifier.Quoted;
2931
import cloud.commandframework.annotations.specifier.Range;
3032
import cloud.commandframework.annotations.suggestions.Suggestions;
3133
import cloud.commandframework.arguments.StaticArgument;
@@ -37,30 +39,28 @@
3739
import cloud.commandframework.meta.SimpleCommandMeta;
3840
import io.leangen.geantyref.TypeToken;
3941

40-
import java.util.ArrayList;
41-
import java.util.HashSet;
42-
43-
import java.util.Set;
44-
45-
import org.junit.jupiter.api.Assertions;
46-
import org.junit.jupiter.api.BeforeAll;
47-
import org.junit.jupiter.api.Test;
48-
import org.junit.jupiter.api.TestInstance;
49-
5042
import java.lang.annotation.ElementType;
5143
import java.lang.annotation.Retention;
5244
import java.lang.annotation.RetentionPolicy;
5345
import java.lang.annotation.Target;
5446
import java.lang.reflect.Method;
47+
import java.util.ArrayList;
5548
import java.util.Arrays;
5649
import java.util.Collection;
5750
import java.util.Collections;
51+
import java.util.HashSet;
5852
import java.util.LinkedList;
5953
import java.util.List;
6054
import java.util.Queue;
55+
import java.util.Set;
6156
import java.util.concurrent.CompletionException;
6257
import java.util.function.BiFunction;
6358

59+
import org.junit.jupiter.api.Assertions;
60+
import org.junit.jupiter.api.BeforeAll;
61+
import org.junit.jupiter.api.Test;
62+
import org.junit.jupiter.api.TestInstance;
63+
6464
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
6565
class AnnotationParserTest {
6666

@@ -107,6 +107,8 @@ void testMethodConstruction() {
107107
manager.executeCommand(new TestCommandSender(), "test 101").join());
108108
manager.executeCommand(new TestCommandSender(), "flagcommand -p").join();
109109
manager.executeCommand(new TestCommandSender(), "flagcommand --print --word peanut").join();
110+
manager.executeCommand(new TestCommandSender(), "parserflagcommand -s \"Hello World\"").join();
111+
manager.executeCommand(new TestCommandSender(), "parserflagcommand -s \"Hello World\" -o This is a test").join();
110112
manager.executeCommand(new TestCommandSender(), "class method").join();
111113
}
112114

@@ -244,6 +246,15 @@ public void testFlags(
244246
}
245247
}
246248

249+
@CommandMethod("parserflagcommand")
250+
public void testQuotedFlags(
251+
final TestCommandSender sender,
252+
@Flag(value = "sentence", aliases = "s") @Quoted final String sentence,
253+
@Flag(value = "other", aliases = "o") @Greedy final String otherStuff
254+
) {
255+
System.out.println(sentence + (otherStuff == null ? "" : " " + otherStuff));
256+
}
257+
247258
@CommandMethod("namedsuggestions <input>")
248259
public void testNamedSuggestionProviders(
249260
@Argument(value = "input", suggestions = "some-name") final String argument

0 commit comments

Comments
 (0)