diff options
author | Wyvest <45589059+Wyvest@users.noreply.github.com> | 2022-06-05 15:27:36 +0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-05 10:27:36 +0200 |
commit | 44dfbbb419f1736530c04c02a651f7757cf83f3d (patch) | |
tree | 1e8171573680b9415cecf199d479d49f7ad1f48a /src/main/java/cc/polyfrost/oneconfig/utils/commands/arguments | |
parent | 494d4f0bd0856e8e8d373003c82729ca722c6ccf (diff) | |
download | OneConfig-44dfbbb419f1736530c04c02a651f7757cf83f3d.tar.gz OneConfig-44dfbbb419f1736530c04c02a651f7757cf83f3d.tar.bz2 OneConfig-44dfbbb419f1736530c04c02a651f7757cf83f3d.zip |
rewrite command manager, stop using essential relocate, and reformat code (#34)
* reformat code
* reformat code
rewrite command manager
stop using essential relocate
Diffstat (limited to 'src/main/java/cc/polyfrost/oneconfig/utils/commands/arguments')
6 files changed, 64 insertions, 6 deletions
diff --git a/src/main/java/cc/polyfrost/oneconfig/utils/commands/arguments/ArgumentParser.java b/src/main/java/cc/polyfrost/oneconfig/utils/commands/arguments/ArgumentParser.java index d9d51b0..8bf811b 100644 --- a/src/main/java/cc/polyfrost/oneconfig/utils/commands/arguments/ArgumentParser.java +++ b/src/main/java/cc/polyfrost/oneconfig/utils/commands/arguments/ArgumentParser.java @@ -3,10 +3,36 @@ package cc.polyfrost.oneconfig.utils.commands.arguments; import com.google.common.reflect.TypeToken; import org.jetbrains.annotations.Nullable; -@SuppressWarnings("unstable") +import java.lang.reflect.Parameter; +import java.util.Collections; +import java.util.List; + +@SuppressWarnings("UnstableApiUsage") public abstract class ArgumentParser<T> { - private final TypeToken<T> type = new TypeToken<T>(getClass()) {}; + private final TypeToken<T> type = new TypeToken<T>(getClass()) { + }; public final Class<?> typeClass = type.getRawType(); + + /** + * Parses the given string into an object of the type specified by this parser. + * Should return null if the string cannot be parsed. + * + * @param arguments The string to parse. + * @return The parsed object, or null if the string cannot be parsed. + */ @Nullable public abstract T parse(Arguments arguments); + + /** + * Returns possible completions for the given arguments. + * Should return an empty list or null if no completions are possible. + * + * @param arguments The arguments to complete. + * @param parameter The parameter to complete. + * @return A list of possible completions, or an empty list or null if no completions are possible. + */ + @Nullable + public List<String> complete(Arguments arguments, Parameter parameter) { + return Collections.emptyList(); + } } diff --git a/src/main/java/cc/polyfrost/oneconfig/utils/commands/arguments/Arguments.java b/src/main/java/cc/polyfrost/oneconfig/utils/commands/arguments/Arguments.java index 74a0840..f35cf46 100644 --- a/src/main/java/cc/polyfrost/oneconfig/utils/commands/arguments/Arguments.java +++ b/src/main/java/cc/polyfrost/oneconfig/utils/commands/arguments/Arguments.java @@ -1,9 +1,9 @@ package cc.polyfrost.oneconfig.utils.commands.arguments; public class Arguments { - private int position = 0; public final String[] args; public final boolean greedy; + private int position = 0; public Arguments(String[] args, boolean greedy) { this.args = args; diff --git a/src/main/java/cc/polyfrost/oneconfig/utils/commands/arguments/BooleanParser.java b/src/main/java/cc/polyfrost/oneconfig/utils/commands/arguments/BooleanParser.java index dfdca2d..7411cbe 100644 --- a/src/main/java/cc/polyfrost/oneconfig/utils/commands/arguments/BooleanParser.java +++ b/src/main/java/cc/polyfrost/oneconfig/utils/commands/arguments/BooleanParser.java @@ -1,11 +1,31 @@ package cc.polyfrost.oneconfig.utils.commands.arguments; +import com.google.common.collect.Lists; import org.jetbrains.annotations.Nullable; +import java.lang.reflect.Parameter; +import java.util.List; +import java.util.Locale; + public class BooleanParser extends ArgumentParser<Boolean> { + private static final List<String> VALUES = Lists.newArrayList("true", "false"); + @Override public @Nullable Boolean parse(Arguments arguments) { return Boolean.parseBoolean(arguments.poll()); } + + @Override + public @Nullable List<String> complete(Arguments arguments, Parameter parameter) { + String value = arguments.poll(); + if (value != null && !value.trim().isEmpty()) { + for (String v : VALUES) { + if (v.startsWith(value.toLowerCase(Locale.ENGLISH))) { + return Lists.newArrayList(v); + } + } + } + return VALUES; + } } diff --git a/src/main/java/cc/polyfrost/oneconfig/utils/commands/arguments/DoubleParser.java b/src/main/java/cc/polyfrost/oneconfig/utils/commands/arguments/DoubleParser.java index 8c85849..4379e3a 100644 --- a/src/main/java/cc/polyfrost/oneconfig/utils/commands/arguments/DoubleParser.java +++ b/src/main/java/cc/polyfrost/oneconfig/utils/commands/arguments/DoubleParser.java @@ -5,6 +5,10 @@ import org.jetbrains.annotations.Nullable; public class DoubleParser extends ArgumentParser<Double> { @Override public @Nullable Double parse(Arguments arguments) { - return Double.parseDouble(arguments.poll()); + try { + return Double.parseDouble(arguments.poll()); + } catch (NumberFormatException e) { + return null; + } } } diff --git a/src/main/java/cc/polyfrost/oneconfig/utils/commands/arguments/FloatParser.java b/src/main/java/cc/polyfrost/oneconfig/utils/commands/arguments/FloatParser.java index 7053fcb..08e0a45 100644 --- a/src/main/java/cc/polyfrost/oneconfig/utils/commands/arguments/FloatParser.java +++ b/src/main/java/cc/polyfrost/oneconfig/utils/commands/arguments/FloatParser.java @@ -6,6 +6,10 @@ public class FloatParser extends ArgumentParser<Float> { @Override public @Nullable Float parse(Arguments arguments) { - return Float.parseFloat(arguments.poll()); + try { + return Float.parseFloat(arguments.poll()); + } catch (NumberFormatException e) { + return null; + } } } diff --git a/src/main/java/cc/polyfrost/oneconfig/utils/commands/arguments/IntegerParser.java b/src/main/java/cc/polyfrost/oneconfig/utils/commands/arguments/IntegerParser.java index 6910d4b..89f4eca 100644 --- a/src/main/java/cc/polyfrost/oneconfig/utils/commands/arguments/IntegerParser.java +++ b/src/main/java/cc/polyfrost/oneconfig/utils/commands/arguments/IntegerParser.java @@ -3,6 +3,10 @@ package cc.polyfrost.oneconfig.utils.commands.arguments; public class IntegerParser extends ArgumentParser<Integer> { @Override public Integer parse(Arguments arguments) { - return Integer.parseInt(arguments.poll()); + try { + return Integer.parseInt(arguments.poll()); + } catch (NumberFormatException e) { + return null; + } } } |