From 04a6919c6ad146df7206a7cc0766644c6b0d5592 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20S=C3=B6derberg?= Date: Fri, 18 Sep 2020 22:51:33 +0200 Subject: [PATCH] Add completions to all integer types --- .../arguments/standard/ByteArgument.java | 9 +++++++++ .../arguments/standard/CharArgument.java | 1 + .../arguments/standard/DoubleArgument.java | 1 + .../arguments/standard/IntegerArgument.java | 16 +++++++++++----- .../arguments/standard/LongArgument.java | 9 +++++++++ .../arguments/standard/ShortArgument.java | 9 +++++++++ 6 files changed, 40 insertions(+), 5 deletions(-) diff --git a/cloud-core/src/main/java/com/intellectualsites/commands/arguments/standard/ByteArgument.java b/cloud-core/src/main/java/com/intellectualsites/commands/arguments/standard/ByteArgument.java index 90f7bf69..bbea4d2b 100644 --- a/cloud-core/src/main/java/com/intellectualsites/commands/arguments/standard/ByteArgument.java +++ b/cloud-core/src/main/java/com/intellectualsites/commands/arguments/standard/ByteArgument.java @@ -30,6 +30,7 @@ import com.intellectualsites.commands.context.CommandContext; import com.intellectualsites.commands.exceptions.parsing.NumberParseException; import javax.annotation.Nonnull; +import java.util.List; import java.util.Queue; @SuppressWarnings("unused") @@ -207,6 +208,14 @@ public final class ByteArgument extends CommandArgument { public boolean isContextFree() { return true; } + + @Nonnull + @Override + public List suggestions(@Nonnull final CommandContext commandContext, + @Nonnull final String input) { + return IntegerArgument.IntegerParser.getSuggestions(this.min, this.max, input); + } + } diff --git a/cloud-core/src/main/java/com/intellectualsites/commands/arguments/standard/CharArgument.java b/cloud-core/src/main/java/com/intellectualsites/commands/arguments/standard/CharArgument.java index 2003a34c..b17004bc 100644 --- a/cloud-core/src/main/java/com/intellectualsites/commands/arguments/standard/CharArgument.java +++ b/cloud-core/src/main/java/com/intellectualsites/commands/arguments/standard/CharArgument.java @@ -132,6 +132,7 @@ public final class CharArgument extends CommandArgument { public boolean isContextFree() { return true; } + } diff --git a/cloud-core/src/main/java/com/intellectualsites/commands/arguments/standard/DoubleArgument.java b/cloud-core/src/main/java/com/intellectualsites/commands/arguments/standard/DoubleArgument.java index 8a5a2be8..f1dc2e12 100644 --- a/cloud-core/src/main/java/com/intellectualsites/commands/arguments/standard/DoubleArgument.java +++ b/cloud-core/src/main/java/com/intellectualsites/commands/arguments/standard/DoubleArgument.java @@ -206,6 +206,7 @@ public final class DoubleArgument extends CommandArgument { public boolean isContextFree() { return true; } + } diff --git a/cloud-core/src/main/java/com/intellectualsites/commands/arguments/standard/IntegerArgument.java b/cloud-core/src/main/java/com/intellectualsites/commands/arguments/standard/IntegerArgument.java index c156b72c..dcdb41b0 100644 --- a/cloud-core/src/main/java/com/intellectualsites/commands/arguments/standard/IntegerArgument.java +++ b/cloud-core/src/main/java/com/intellectualsites/commands/arguments/standard/IntegerArgument.java @@ -237,26 +237,32 @@ public final class IntegerArgument extends CommandArgument { @Override public List suggestions(@Nonnull final CommandContext commandContext, @Nonnull final String input) { + return getSuggestions(this.min, this.max, input); + } + + @Nonnull + static List getSuggestions(final long min, final long max, @Nonnull final String input) { if (input.isEmpty()) { return IntStream.range(0, MAX_SUGGESTIONS_INCREMENT).mapToObj(Integer::toString).collect(Collectors.toList()); } try { - final int inputInt = Integer.parseInt(input); - if (inputInt > this.getMax()) { + final long inputNum = Long.parseLong(input); + if (inputNum > max) { return Collections.emptyList(); } else { final List suggestions = new LinkedList<>(); suggestions.add(input); /* It's a valid number, so we suggest it */ for (int i = 0; i < MAX_SUGGESTIONS_INCREMENT - && (inputInt * NUMBER_SHIFT_MULTIPLIER) + i <= this.getMax(); i++) { - suggestions.add(Integer.toString((inputInt * NUMBER_SHIFT_MULTIPLIER) + i)); + && (inputNum * NUMBER_SHIFT_MULTIPLIER) + i <= max; i++) { + suggestions.add(Long.toString((inputNum * NUMBER_SHIFT_MULTIPLIER) + i)); } return suggestions; } } catch (final Exception ignored) { - return Collections.emptyList(); /* Invalid input */ + return Collections.emptyList(); } } + } diff --git a/cloud-core/src/main/java/com/intellectualsites/commands/arguments/standard/LongArgument.java b/cloud-core/src/main/java/com/intellectualsites/commands/arguments/standard/LongArgument.java index f60a859f..526e5c68 100644 --- a/cloud-core/src/main/java/com/intellectualsites/commands/arguments/standard/LongArgument.java +++ b/cloud-core/src/main/java/com/intellectualsites/commands/arguments/standard/LongArgument.java @@ -30,6 +30,7 @@ import com.intellectualsites.commands.context.CommandContext; import com.intellectualsites.commands.exceptions.parsing.NumberParseException; import javax.annotation.Nonnull; +import java.util.List; import java.util.Queue; @SuppressWarnings("unused") @@ -200,6 +201,14 @@ public final class LongArgument extends CommandArgument { public boolean isContextFree() { return true; } + + @Nonnull + @Override + public List suggestions(@Nonnull final CommandContext commandContext, + @Nonnull final String input) { + return IntegerArgument.IntegerParser.getSuggestions(this.min, this.max, input); + } + } diff --git a/cloud-core/src/main/java/com/intellectualsites/commands/arguments/standard/ShortArgument.java b/cloud-core/src/main/java/com/intellectualsites/commands/arguments/standard/ShortArgument.java index 5f6950df..5bd07ed8 100644 --- a/cloud-core/src/main/java/com/intellectualsites/commands/arguments/standard/ShortArgument.java +++ b/cloud-core/src/main/java/com/intellectualsites/commands/arguments/standard/ShortArgument.java @@ -30,6 +30,7 @@ import com.intellectualsites.commands.context.CommandContext; import com.intellectualsites.commands.exceptions.parsing.NumberParseException; import javax.annotation.Nonnull; +import java.util.List; import java.util.Queue; @SuppressWarnings("unused") @@ -206,6 +207,14 @@ public final class ShortArgument extends CommandArgument { public boolean isContextFree() { return true; } + + @Nonnull + @Override + public List suggestions(@Nonnull final CommandContext commandContext, + @Nonnull final String input) { + return IntegerArgument.IntegerParser.getSuggestions(this.min, this.max, input); + } + }