Some ArgParser cleanups

This commit is contained in:
Brady 2019-09-19 21:24:23 -05:00
parent 0a2e3f98f9
commit a0f412f255
No known key found for this signature in database
GPG Key ID: 73A788379A197567
5 changed files with 42 additions and 36 deletions

View File

@ -19,29 +19,36 @@ package baritone.api.utils.command.argparser;
public abstract class ArgParser<T> implements IArgParser<T> { public abstract class ArgParser<T> implements IArgParser<T> {
private final Class<T> klass; private final Class<T> target;
protected ArgParser(Class<T> klass) { private ArgParser(Class<T> target) {
this.klass = klass; this.target = target;
} }
@Override @Override
public Class<T> getKlass() { public Class<T> getTarget() {
return klass; return target;
}
public static abstract class Stateless<T> extends ArgParser<T> implements IArgParser.Stateless<T> {
public Stateless(Class<T> target) {
super(target);
}
} }
public static abstract class Stated<T, S> extends ArgParser<T> implements IArgParser.Stated<T, S> { public static abstract class Stated<T, S> extends ArgParser<T> implements IArgParser.Stated<T, S> {
private final Class<S> stateKlass; private final Class<S> stateType;
protected Stated(Class<T> klass, Class<S> stateKlass) { protected Stated(Class<T> target, Class<S> stateType) {
super(klass); super(target);
this.stateKlass = stateKlass; this.stateType = stateType;
} }
@Override @Override
public Class<S> getStateKlass() { public Class<S> getStateType() {
return stateKlass; return stateType;
} }
} }
} }

View File

@ -31,30 +31,30 @@ public class ArgParserManager {
} }
/** /**
* @param klass The class to search for. * @param type The type trying to be parsed
* @return A parser that can parse arguments into this class, if found. * @return A parser that can parse arguments into this class, if found.
*/ */
public static <T> ArgParser.Stateless<T> getParserStateless(Class<T> klass) { public static <T> ArgParser.Stateless<T> getParserStateless(Class<T> type) {
//noinspection unchecked //noinspection unchecked
return REGISTRY.descendingStream() return REGISTRY.descendingStream()
.filter(ArgParser.Stateless.class::isInstance) .filter(ArgParser.Stateless.class::isInstance)
.map(ArgParser.Stateless.class::cast) .map(ArgParser.Stateless.class::cast)
.filter(parser -> parser.getKlass().isAssignableFrom(klass)) .filter(parser -> parser.getTarget().isAssignableFrom(type))
.findFirst() .findFirst()
.orElse(null); .orElse(null);
} }
/** /**
* @param klass The class to search for. * @param type The type trying to be parsed
* @return A parser that can parse arguments into this class, if found. * @return A parser that can parse arguments into this class, if found.
*/ */
public static <T, S> ArgParser.Stated<T, S> getParserStated(Class<T> klass, Class<S> stateKlass) { public static <T, S> ArgParser.Stated<T, S> getParserStated(Class<T> type, Class<S> stateKlass) {
//noinspection unchecked //noinspection unchecked
return REGISTRY.descendingStream() return REGISTRY.descendingStream()
.filter(ArgParser.Stated.class::isInstance) .filter(ArgParser.Stated.class::isInstance)
.map(ArgParser.Stated.class::cast) .map(ArgParser.Stated.class::cast)
.filter(parser -> parser.getKlass().isAssignableFrom(klass)) .filter(parser -> parser.getTarget().isAssignableFrom(type))
.filter(parser -> parser.getStateKlass().isAssignableFrom(stateKlass)) .filter(parser -> parser.getStateType().isAssignableFrom(stateKlass))
.map(ArgParser.Stated.class::cast) .map(ArgParser.Stated.class::cast)
.findFirst() .findFirst()
.orElse(null); .orElse(null);
@ -63,28 +63,28 @@ public class ArgParserManager {
/** /**
* Attempt to parse the specified argument with a stateless {@link ArgParser} that outputs the specified class. * Attempt to parse the specified argument with a stateless {@link ArgParser} that outputs the specified class.
* *
* @param klass The class to parse the argument into. * @param type The type to try and parse the argument into.
* @param arg The argument to parse. * @param arg The argument to parse.
* @return An instance of the specified class. * @return An instance of the specified class.
* @throws CommandNoParserForTypeException If no parser exists for that type * @throws CommandNoParserForTypeException If no parser exists for that type
* @throws CommandInvalidTypeException If the parsing failed * @throws CommandInvalidTypeException If the parsing failed
*/ */
public static <T> T parseStateless(Class<T> klass, CommandArgument arg) { public static <T> T parseStateless(Class<T> type, CommandArgument arg) {
ArgParser.Stateless<T> parser = getParserStateless(klass); ArgParser.Stateless<T> parser = getParserStateless(type);
if (parser == null) { if (parser == null) {
throw new CommandNoParserForTypeException(klass); throw new CommandNoParserForTypeException(type);
} }
try { try {
return parser.parseArg(arg); return parser.parseArg(arg);
} catch (RuntimeException exc) { } catch (RuntimeException exc) {
throw new CommandInvalidTypeException(arg, klass.getSimpleName()); throw new CommandInvalidTypeException(arg, type.getSimpleName());
} }
} }
/** /**
* Attempt to parse the specified argument with a stated {@link ArgParser} that outputs the specified class. * Attempt to parse the specified argument with a stated {@link ArgParser} that outputs the specified class.
* *
* @param klass The class to parse the argument into. * @param type The type to try and parse the argument into.
* @param arg The argument to parse. * @param arg The argument to parse.
* @param state The state to pass to the {@link ArgParser.Stated}. * @param state The state to pass to the {@link ArgParser.Stated}.
* @return An instance of the specified class. * @return An instance of the specified class.
@ -92,15 +92,15 @@ public class ArgParserManager {
* @throws CommandInvalidTypeException If the parsing failed * @throws CommandInvalidTypeException If the parsing failed
* @see ArgParser.Stated * @see ArgParser.Stated
*/ */
public static <T, S> T parseStated(Class<T> klass, Class<S> stateKlass, CommandArgument arg, S state) { public static <T, S> T parseStated(Class<T> type, Class<S> stateKlass, CommandArgument arg, S state) {
ArgParser.Stated<T, S> parser = getParserStated(klass, stateKlass); ArgParser.Stated<T, S> parser = getParserStated(type, stateKlass);
if (parser == null) { if (parser == null) {
throw new CommandNoParserForTypeException(klass); throw new CommandNoParserForTypeException(type);
} }
try { try {
return parser.parseArg(arg, state); return parser.parseArg(arg, state);
} catch (RuntimeException exc) { } catch (RuntimeException exc) {
throw new CommandInvalidTypeException(arg, klass.getSimpleName()); throw new CommandInvalidTypeException(arg, type.getSimpleName());
} }
} }
} }

View File

@ -25,7 +25,7 @@ import java.util.Locale;
public class DefaultArgParsers { public class DefaultArgParsers {
public static class IntArgumentParser extends ArgParser<Integer> implements IArgParser.Stateless<Integer> { public static class IntArgumentParser extends ArgParser.Stateless<Integer> {
public static final IntArgumentParser INSTANCE = new IntArgumentParser(); public static final IntArgumentParser INSTANCE = new IntArgumentParser();
@ -39,7 +39,7 @@ public class DefaultArgParsers {
} }
} }
public static class LongArgumentParser extends ArgParser<Long> implements IArgParser.Stateless<Long> { public static class LongArgumentParser extends ArgParser.Stateless<Long> {
public static final LongArgumentParser INSTANCE = new LongArgumentParser(); public static final LongArgumentParser INSTANCE = new LongArgumentParser();
@ -53,7 +53,7 @@ public class DefaultArgParsers {
} }
} }
public static class FloatArgumentParser extends ArgParser<Float> implements IArgParser.Stateless<Float> { public static class FloatArgumentParser extends ArgParser.Stateless<Float> {
public static final FloatArgumentParser INSTANCE = new FloatArgumentParser(); public static final FloatArgumentParser INSTANCE = new FloatArgumentParser();
@ -71,7 +71,7 @@ public class DefaultArgParsers {
} }
} }
public static class DoubleArgumentParser extends ArgParser<Double> implements IArgParser.Stateless<Double> { public static class DoubleArgumentParser extends ArgParser.Stateless<Double> {
public static final DoubleArgumentParser INSTANCE = new DoubleArgumentParser(); public static final DoubleArgumentParser INSTANCE = new DoubleArgumentParser();
@ -89,7 +89,7 @@ public class DefaultArgParsers {
} }
} }
public static class BooleanArgumentParser extends ArgParser<Boolean> implements IArgParser.Stateless<Boolean> { public static class BooleanArgumentParser extends ArgParser.Stateless<Boolean> {
public static final BooleanArgumentParser INSTANCE = new BooleanArgumentParser(); public static final BooleanArgumentParser INSTANCE = new BooleanArgumentParser();
public static final List<String> TRUTHY_VALUES = Arrays.asList("1", "true", "yes", "t", "y", "on", "enable"); public static final List<String> TRUTHY_VALUES = Arrays.asList("1", "true", "yes", "t", "y", "on", "enable");

View File

@ -24,7 +24,7 @@ public interface IArgParser<T> {
/** /**
* @return the class of this parser. * @return the class of this parser.
*/ */
Class<T> getKlass(); Class<T> getTarget();
/** /**
* A stateless argument parser is just that. It takes a {@link CommandArgument} and outputs its type. * A stateless argument parser is just that. It takes a {@link CommandArgument} and outputs its type.
@ -50,7 +50,7 @@ public interface IArgParser<T> {
*/ */
interface Stated<T, S> extends IArgParser<T> { interface Stated<T, S> extends IArgParser<T> {
Class<S> getStateKlass(); Class<S> getStateType();
/** /**
* @param arg The argument to parse. * @param arg The argument to parse.

View File

@ -31,7 +31,6 @@ import java.util.stream.StreamSupport;
* @param <V> The entry type that will be stored in this registry. This can be anything, really - preferably anything * @param <V> The entry type that will be stored in this registry. This can be anything, really - preferably anything
* that works as a HashMap key, as that's what's used to keep track of which entries are registered or not. * that works as a HashMap key, as that's what's used to keep track of which entries are registered or not.
*/ */
@SuppressWarnings({"unused", "UnusedReturnValue"})
public class Registry<V> { public class Registry<V> {
/** /**