Skip to content

Commit 60a94e5

Browse files
committed
Cache lowercase versions of inputs and literals to avoid repeated calls to toLowerCase().
Thank you to Spottedleaf.
1 parent 242de3f commit 60a94e5

File tree

4 files changed

+22
-7
lines changed

4 files changed

+22
-7
lines changed

src/main/java/com/mojang/brigadier/CommandDispatcher.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -588,12 +588,13 @@ public CompletableFuture<Suggestions> getCompletionSuggestions(final ParseResult
588588

589589
final String fullInput = parse.getReader().getString();
590590
final String truncatedInput = fullInput.substring(0, cursor);
591+
final String truncatedInputLowerCase = truncatedInput.toLowerCase();
591592
@SuppressWarnings("unchecked") final CompletableFuture<Suggestions>[] futures = new CompletableFuture[parent.getChildren().size()];
592593
int i = 0;
593594
for (final CommandNode<S> node : parent.getChildren()) {
594595
CompletableFuture<Suggestions> future = Suggestions.empty();
595596
try {
596-
future = node.listSuggestions(context.build(truncatedInput), new SuggestionsBuilder(truncatedInput, start));
597+
future = node.listSuggestions(context.build(truncatedInput), new SuggestionsBuilder(truncatedInput, truncatedInputLowerCase, start));
597598
} catch (final CommandSyntaxException ignored) {
598599
}
599600
futures[i++] = future;

src/main/java/com/mojang/brigadier/arguments/BoolArgumentType.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,10 @@ public Boolean parse(final StringReader reader) throws CommandSyntaxException {
3434

3535
@Override
3636
public <S> CompletableFuture<Suggestions> listSuggestions(final CommandContext<S> context, final SuggestionsBuilder builder) {
37-
if ("true".startsWith(builder.getRemaining().toLowerCase())) {
37+
if ("true".startsWith(builder.getRemainingLowerCase())) {
3838
builder.suggest("true");
3939
}
40-
if ("false".startsWith(builder.getRemaining().toLowerCase())) {
40+
if ("false".startsWith(builder.getRemainingLowerCase())) {
4141
builder.suggest("false");
4242
}
4343
return builder.buildFuture();

src/main/java/com/mojang/brigadier/suggestion/SuggestionsBuilder.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,22 @@
1212

1313
public class SuggestionsBuilder {
1414
private final String input;
15+
private final String inputLowerCase;
1516
private final int start;
1617
private final String remaining;
18+
private final String remainingLowerCase;
1719
private final List<Suggestion> result = new ArrayList<>();
1820

19-
public SuggestionsBuilder(final String input, final int start) {
21+
public SuggestionsBuilder(final String input, final String inputLowerCase, final int start) {
2022
this.input = input;
23+
this.inputLowerCase = inputLowerCase;
2124
this.start = start;
2225
this.remaining = input.substring(start);
26+
this.remainingLowerCase = inputLowerCase.substring(start);
27+
}
28+
29+
public SuggestionsBuilder(final String input, final int start) {
30+
this(input, input.toLowerCase(), start);
2331
}
2432

2533
public String getInput() {
@@ -34,6 +42,10 @@ public String getRemaining() {
3442
return remaining;
3543
}
3644

45+
public String getRemainingLowerCase() {
46+
return remainingLowerCase;
47+
}
48+
3749
public Suggestions build() {
3850
return Suggestions.create(input, result);
3951
}
@@ -74,10 +86,10 @@ public SuggestionsBuilder add(final SuggestionsBuilder other) {
7486
}
7587

7688
public SuggestionsBuilder createOffset(final int start) {
77-
return new SuggestionsBuilder(input, start);
89+
return new SuggestionsBuilder(input, inputLowerCase, start);
7890
}
7991

8092
public SuggestionsBuilder restart() {
81-
return new SuggestionsBuilder(input, start);
93+
return createOffset(start);
8294
}
8395
}

src/main/java/com/mojang/brigadier/tree/LiteralCommandNode.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,12 @@
2121

2222
public class LiteralCommandNode<S> extends CommandNode<S> {
2323
private final String literal;
24+
private final String literalLowerCase;
2425

2526
public LiteralCommandNode(final String literal, final Command<S> command, final Predicate<S> requirement, final CommandNode<S> redirect, final RedirectModifier<S> modifier, final boolean forks) {
2627
super(command, requirement, redirect, modifier, forks);
2728
this.literal = literal;
29+
this.literalLowerCase = literal.toLowerCase();
2830
}
2931

3032
public String getLiteral() {
@@ -66,7 +68,7 @@ private int parse(final StringReader reader) {
6668

6769
@Override
6870
public CompletableFuture<Suggestions> listSuggestions(final CommandContext<S> context, final SuggestionsBuilder builder) {
69-
if (literal.toLowerCase().startsWith(builder.getRemaining().toLowerCase())) {
71+
if (literalLowerCase.startsWith(builder.getRemainingLowerCase())) {
7072
return builder.suggest(literal).buildFuture();
7173
} else {
7274
return Suggestions.empty();

0 commit comments

Comments
 (0)