Skip to content

Commit f067676

Browse files
authored
feat(core): Add CommandComponent.Builder factories that accept a name and ParserDescriptor (#707)
1 parent cbea61e commit f067676

3 files changed

Lines changed: 70 additions & 67 deletions

File tree

cloud-core/src/main/java/org/incendo/cloud/Command.java

Lines changed: 25 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -168,9 +168,7 @@ public Command(
168168
final List<CommandComponent<C>> commands = new ArrayList<>();
169169
final ParserDescriptor<C, String> staticParser = LiteralParser.literal(commandName, aliases);
170170
commands.add(
171-
CommandComponent.<C, String>builder()
172-
.name(commandName)
173-
.parser(staticParser)
171+
CommandComponent.builder(commandName, staticParser)
174172
.description(description)
175173
.build()
176174
);
@@ -659,7 +657,7 @@ private Builder(
659657
final @NonNull String name,
660658
final @NonNull ParserDescriptor<? super C, T> parser
661659
) {
662-
return this.argument(CommandComponent.<C, T>builder().name(name).parser(parser).build());
660+
return this.argument(CommandComponent.<C, T>builder(name, parser).build());
663661
}
664662

665663
/**
@@ -678,9 +676,7 @@ private Builder(
678676
final @NonNull SuggestionProvider<? super C> suggestions
679677
) {
680678
return this.argument(
681-
CommandComponent.<C, T>builder()
682-
.name(name)
683-
.parser(parser)
679+
CommandComponent.<C, T>builder(name, parser)
684680
.suggestionProvider(suggestions)
685681
.build()
686682
);
@@ -699,7 +695,7 @@ private Builder(
699695
final @NonNull CloudKey<T> name,
700696
final @NonNull ParserDescriptor<? super C, T> parser
701697
) {
702-
return this.argument(CommandComponent.<C, T>builder().key(name).parser(parser).build());
698+
return this.argument(CommandComponent.<C, T>builder(name, parser).build());
703699
}
704700

705701
/**
@@ -718,9 +714,7 @@ private Builder(
718714
final @NonNull SuggestionProvider<? super C> suggestions
719715
) {
720716
return this.argument(
721-
CommandComponent.<C, T>builder()
722-
.key(name)
723-
.parser(parser)
717+
CommandComponent.<C, T>builder(name, parser)
724718
.suggestionProvider(suggestions)
725719
.build()
726720
);
@@ -741,7 +735,7 @@ private Builder(
741735
final @NonNull ParserDescriptor<? super C, T> parser,
742736
final @NonNull Description description
743737
) {
744-
return this.argument(CommandComponent.<C, T>builder().key(name).parser(parser).description(description).build());
738+
return this.argument(CommandComponent.<C, T>builder(name, parser).description(description).build());
745739
}
746740

747741
/**
@@ -762,9 +756,7 @@ private Builder(
762756
final @NonNull SuggestionProvider<? super C> suggestions
763757
) {
764758
return this.argument(
765-
CommandComponent.<C, T>builder()
766-
.key(name)
767-
.parser(parser)
759+
CommandComponent.<C, T>builder(name, parser)
768760
.description(description)
769761
.suggestionProvider(suggestions)
770762
.build()
@@ -786,7 +778,7 @@ private Builder(
786778
final @NonNull ParserDescriptor<? super C, T> parser,
787779
final @NonNull Description description
788780
) {
789-
return this.argument(CommandComponent.<C, T>builder().name(name).parser(parser).description(description).build());
781+
return this.argument(CommandComponent.<C, T>builder(name, parser).description(description).build());
790782
}
791783

792784
/**
@@ -807,9 +799,7 @@ private Builder(
807799
final @NonNull SuggestionProvider<? super C> suggestions
808800
) {
809801
return this.argument(
810-
CommandComponent.<C, T>builder()
811-
.name(name)
812-
.parser(parser)
802+
CommandComponent.<C, T>builder(name, parser)
813803
.description(description)
814804
.suggestionProvider(suggestions)
815805
.build()
@@ -830,7 +820,7 @@ private Builder(
830820
final @NonNull String name,
831821
final @NonNull ParserDescriptor<? super C, T> parser
832822
) {
833-
return this.argument(CommandComponent.<C, T>builder().name(name).parser(parser).optional().build());
823+
return this.argument(CommandComponent.<C, T>builder(name, parser).optional().build());
834824
}
835825

836826
/**
@@ -849,9 +839,7 @@ private Builder(
849839
final @NonNull SuggestionProvider<? super C> suggestions
850840
) {
851841
return this.argument(
852-
CommandComponent.<C, T>builder()
853-
.name(name)
854-
.parser(parser)
842+
CommandComponent.<C, T>builder(name, parser)
855843
.optional()
856844
.suggestionProvider(suggestions)
857845
.build()
@@ -871,7 +859,7 @@ private Builder(
871859
final @NonNull CloudKey<T> name,
872860
final @NonNull ParserDescriptor<? super C, T> parser
873861
) {
874-
return this.argument(CommandComponent.<C, T>builder().key(name).parser(parser).optional().build());
862+
return this.argument(CommandComponent.<C, T>builder(name, parser).optional().build());
875863
}
876864

877865
/**
@@ -890,9 +878,7 @@ private Builder(
890878
final @NonNull SuggestionProvider<? super C> suggestions
891879
) {
892880
return this.argument(
893-
CommandComponent.<C, T>builder()
894-
.key(name)
895-
.parser(parser)
881+
CommandComponent.<C, T>builder(name, parser)
896882
.optional()
897883
.suggestionProvider(suggestions)
898884
.build()
@@ -915,9 +901,7 @@ private Builder(
915901
final @NonNull Description description
916902
) {
917903
return this.argument(
918-
CommandComponent.<C, T>builder()
919-
.name(name)
920-
.parser(parser)
904+
CommandComponent.<C, T>builder(name, parser)
921905
.description(description)
922906
.optional()
923907
.build()
@@ -942,9 +926,7 @@ private Builder(
942926
final @NonNull SuggestionProvider<? super C> suggestions
943927
) {
944928
return this.argument(
945-
CommandComponent.<C, T>builder()
946-
.name(name)
947-
.parser(parser)
929+
CommandComponent.<C, T>builder(name, parser)
948930
.description(description)
949931
.optional()
950932
.suggestionProvider(suggestions)
@@ -968,9 +950,7 @@ private Builder(
968950
final @NonNull Description description
969951
) {
970952
return this.argument(
971-
CommandComponent.<C, T>builder()
972-
.key(name)
973-
.parser(parser)
953+
CommandComponent.<C, T>builder(name, parser)
974954
.description(description)
975955
.optional()
976956
.build()
@@ -995,9 +975,7 @@ private Builder(
995975
final @NonNull SuggestionProvider<? super C> suggestions
996976
) {
997977
return this.argument(
998-
CommandComponent.<C, T>builder()
999-
.key(name)
1000-
.parser(parser)
978+
CommandComponent.<C, T>builder(name, parser)
1001979
.description(description)
1002980
.optional()
1003981
.suggestionProvider(suggestions)
@@ -1021,9 +999,7 @@ private Builder(
1021999
final @NonNull DefaultValue<? super C, T> defaultValue
10221000
) {
10231001
return this.argument(
1024-
CommandComponent.<C, T>builder()
1025-
.name(name)
1026-
.parser(parser)
1002+
CommandComponent.<C, T>builder(name, parser)
10271003
.optional(defaultValue)
10281004
.build()
10291005
);
@@ -1047,9 +1023,7 @@ private Builder(
10471023
final @NonNull SuggestionProvider<? super C> suggestions
10481024
) {
10491025
return this.argument(
1050-
CommandComponent.<C, T>builder()
1051-
.name(name)
1052-
.parser(parser)
1026+
CommandComponent.<C, T>builder(name, parser)
10531027
.optional(defaultValue)
10541028
.suggestionProvider(suggestions)
10551029
.build()
@@ -1072,9 +1046,7 @@ private Builder(
10721046
final @NonNull DefaultValue<? super C, T> defaultValue
10731047
) {
10741048
return this.argument(
1075-
CommandComponent.<C, T>builder()
1076-
.key(name)
1077-
.parser(parser)
1049+
CommandComponent.<C, T>builder(name, parser)
10781050
.optional(defaultValue)
10791051
.build()
10801052
);
@@ -1098,9 +1070,7 @@ private Builder(
10981070
final @NonNull SuggestionProvider<? super C> suggestions
10991071
) {
11001072
return this.argument(
1101-
CommandComponent.<C, T>builder()
1102-
.key(name)
1103-
.parser(parser)
1073+
CommandComponent.<C, T>builder(name, parser)
11041074
.optional(defaultValue)
11051075
.suggestionProvider(suggestions)
11061076
.build()
@@ -1125,9 +1095,7 @@ private Builder(
11251095
final @NonNull Description description
11261096
) {
11271097
return this.argument(
1128-
CommandComponent.<C, T>builder()
1129-
.name(name)
1130-
.parser(parser)
1098+
CommandComponent.<C, T>builder(name, parser)
11311099
.optional(defaultValue)
11321100
.description(description)
11331101
.build()
@@ -1154,9 +1122,7 @@ private Builder(
11541122
final @NonNull SuggestionProvider<? super C> suggestions
11551123
) {
11561124
return this.argument(
1157-
CommandComponent.<C, T>builder()
1158-
.name(name)
1159-
.parser(parser)
1125+
CommandComponent.<C, T>builder(name, parser)
11601126
.optional(defaultValue)
11611127
.description(description)
11621128
.suggestionProvider(suggestions)
@@ -1182,9 +1148,7 @@ private Builder(
11821148
final @NonNull Description description
11831149
) {
11841150
return this.argument(
1185-
CommandComponent.<C, T>builder()
1186-
.key(name)
1187-
.parser(parser)
1151+
CommandComponent.<C, T>builder(name, parser)
11881152
.optional(defaultValue)
11891153
.description(description)
11901154
.build()
@@ -1211,9 +1175,7 @@ private Builder(
12111175
final @NonNull SuggestionProvider<? super C> suggestions
12121176
) {
12131177
return this.argument(
1214-
CommandComponent.<C, T>builder()
1215-
.key(name)
1216-
.parser(parser)
1178+
CommandComponent.<C, T>builder(name, parser)
12171179
.optional(defaultValue)
12181180
.description(description)
12191181
.suggestionProvider(suggestions)

cloud-core/src/main/java/org/incendo/cloud/component/CommandComponent.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,44 @@ public class CommandComponent<C> implements Comparable<CommandComponent<C>>, Pre
8383
return new Builder<>();
8484
}
8585

86+
/**
87+
* Creates a new mutable builder.
88+
*
89+
* <p>The builder returns a {@link TypedCommandComponent} which can be used to retrieve parsed values from the
90+
* {@link CommandContext}.</p>
91+
*
92+
* @param name component name
93+
* @param parserDescriptor parser descriptor
94+
* @param <C> command sender type
95+
* @param <T> component value type
96+
* @return the builder
97+
*/
98+
public static <C, T> @NonNull Builder<C, T> builder(
99+
final @NonNull String name,
100+
final @NonNull ParserDescriptor<? super C, T> parserDescriptor
101+
) {
102+
return CommandComponent.<C, T>builder().name(name).parser(parserDescriptor);
103+
}
104+
105+
/**
106+
* Creates a new mutable builder.
107+
*
108+
* <p>The builder returns a {@link TypedCommandComponent} which can be used to retrieve parsed values from the
109+
* {@link CommandContext}.</p>
110+
*
111+
* @param name component name
112+
* @param parserDescriptor parser descriptor
113+
* @param <C> command sender type
114+
* @param <T> component value type
115+
* @return the builder
116+
*/
117+
public static <C, T> @NonNull Builder<C, T> builder(
118+
final @NonNull CloudKey<T> name,
119+
final @NonNull ParserDescriptor<? super C, T> parserDescriptor
120+
) {
121+
return CommandComponent.<C, T>builder().key(name).parser(parserDescriptor);
122+
}
123+
86124
/**
87125
* Creates a new mutable builder.
88126
*
@@ -352,6 +390,9 @@ public static class Builder<C, T> {
352390
private SuggestionProvider<C> suggestionProvider;
353391
private final Collection<@NonNull ComponentPreprocessor<C>> componentPreprocessors = new ArrayList<>();
354392

393+
protected Builder() {
394+
}
395+
355396
/**
356397
* Sets the command manager, which will be used to create a parser if none is provided.
357398
*

cloud-kotlin/cloud-kotlin-extensions/src/main/kotlin/org/incendo/cloud/kotlin/MutableCommandBuilder.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -395,7 +395,7 @@ public class MutableCommandBuilder<C : Any>(
395395
mutator: CommandComponent.Builder<C, T>.() -> Unit = {}
396396
): MutableCommandBuilder<C> = mutate {
397397
it.argument(
398-
CommandComponent.builder<C, T>().name(name).parser(parser).also(mutator)
398+
CommandComponent.builder(name, parser).also(mutator)
399399
)
400400
}
401401

@@ -413,7 +413,7 @@ public class MutableCommandBuilder<C : Any>(
413413
mutator: CommandComponent.Builder<C, T>.() -> Unit = {}
414414
): MutableCommandBuilder<C> = mutate {
415415
it.argument(
416-
CommandComponent.builder<C, T>().name(name).parser(parser).optional().also(mutator)
416+
CommandComponent.builder(name, parser).optional().also(mutator)
417417
)
418418
}
419419

@@ -431,7 +431,7 @@ public class MutableCommandBuilder<C : Any>(
431431
mutator: CommandComponent.Builder<C, T>.() -> Unit = {}
432432
): MutableCommandBuilder<C> = mutate {
433433
it.argument(
434-
CommandComponent.builder<C, T>().key(name).parser(parser).also(mutator)
434+
CommandComponent.builder(name, parser).also(mutator)
435435
)
436436
}
437437

@@ -449,7 +449,7 @@ public class MutableCommandBuilder<C : Any>(
449449
mutator: CommandComponent.Builder<C, T>.() -> Unit = {}
450450
): MutableCommandBuilder<C> = mutate {
451451
it.argument(
452-
CommandComponent.builder<C, T>().key(name).parser(parser).optional().also(mutator)
452+
CommandComponent.builder(name, parser).optional().also(mutator)
453453
)
454454
}
455455

0 commit comments

Comments
 (0)