summaryrefslogtreecommitdiff
path: root/dicore3/command/src/main/java/io/dico/dicore/command/parameter/type
diff options
context:
space:
mode:
Diffstat (limited to 'dicore3/command/src/main/java/io/dico/dicore/command/parameter/type')
-rw-r--r--dicore3/command/src/main/java/io/dico/dicore/command/parameter/type/EnumParameterType.java92
-rw-r--r--dicore3/command/src/main/java/io/dico/dicore/command/parameter/type/IParameterTypeSelector.java88
-rw-r--r--dicore3/command/src/main/java/io/dico/dicore/command/parameter/type/MapBasedParameterTypeSelector.java228
-rw-r--r--dicore3/command/src/main/java/io/dico/dicore/command/parameter/type/ParameterConfig.java160
-rw-r--r--dicore3/command/src/main/java/io/dico/dicore/command/parameter/type/ParameterType.java298
-rw-r--r--dicore3/command/src/main/java/io/dico/dicore/command/parameter/type/SimpleParameterType.java62
6 files changed, 464 insertions, 464 deletions
diff --git a/dicore3/command/src/main/java/io/dico/dicore/command/parameter/type/EnumParameterType.java b/dicore3/command/src/main/java/io/dico/dicore/command/parameter/type/EnumParameterType.java
index c23e09b..063d381 100644
--- a/dicore3/command/src/main/java/io/dico/dicore/command/parameter/type/EnumParameterType.java
+++ b/dicore3/command/src/main/java/io/dico/dicore/command/parameter/type/EnumParameterType.java
@@ -1,46 +1,46 @@
-package io.dico.dicore.command.parameter.type;
-
-import io.dico.dicore.command.CommandException;
-import io.dico.dicore.command.parameter.ArgumentBuffer;
-import io.dico.dicore.command.parameter.Parameter;
-import org.bukkit.Location;
-import org.bukkit.command.CommandSender;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class EnumParameterType<E extends Enum> extends SimpleParameterType<E, Void> {
- private final E[] universe;
-
- public EnumParameterType(Class<E> returnType) {
- super(returnType);
- universe = returnType.getEnumConstants();
- if (universe == null) {
- throw new IllegalArgumentException("returnType must be an enum");
- }
- }
-
- @Override
- protected E parse(Parameter<E, Void> parameter, CommandSender sender, String input) throws CommandException {
- for (E constant : universe) {
- if (constant.name().equalsIgnoreCase(input)) {
- return constant;
- }
- }
-
- throw CommandException.invalidArgument(parameter.getName(), "the enum value does not exist");
- }
-
- @Override
- public List<String> complete(Parameter<E, Void> parameter, CommandSender sender, Location location, ArgumentBuffer buffer) {
- String input = buffer.next().toUpperCase();
- List<String> result = new ArrayList<>();
- for (E constant : universe) {
- if (constant.name().toUpperCase().startsWith(input.toUpperCase())) {
- result.add(constant.name().toLowerCase());
- }
- }
- return result;
- }
-
-}
+package io.dico.dicore.command.parameter.type;
+
+import io.dico.dicore.command.CommandException;
+import io.dico.dicore.command.parameter.ArgumentBuffer;
+import io.dico.dicore.command.parameter.Parameter;
+import org.bukkit.Location;
+import org.bukkit.command.CommandSender;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class EnumParameterType<E extends Enum> extends SimpleParameterType<E, Void> {
+ private final E[] universe;
+
+ public EnumParameterType(Class<E> returnType) {
+ super(returnType);
+ universe = returnType.getEnumConstants();
+ if (universe == null) {
+ throw new IllegalArgumentException("returnType must be an enum");
+ }
+ }
+
+ @Override
+ protected E parse(Parameter<E, Void> parameter, CommandSender sender, String input) throws CommandException {
+ for (E constant : universe) {
+ if (constant.name().equalsIgnoreCase(input)) {
+ return constant;
+ }
+ }
+
+ throw CommandException.invalidArgument(parameter.getName(), "the enum value does not exist");
+ }
+
+ @Override
+ public List<String> complete(Parameter<E, Void> parameter, CommandSender sender, Location location, ArgumentBuffer buffer) {
+ String input = buffer.next().toUpperCase();
+ List<String> result = new ArrayList<>();
+ for (E constant : universe) {
+ if (constant.name().toUpperCase().startsWith(input.toUpperCase())) {
+ result.add(constant.name().toLowerCase());
+ }
+ }
+ return result;
+ }
+
+}
diff --git a/dicore3/command/src/main/java/io/dico/dicore/command/parameter/type/IParameterTypeSelector.java b/dicore3/command/src/main/java/io/dico/dicore/command/parameter/type/IParameterTypeSelector.java
index 780ea0d..381b15c 100644
--- a/dicore3/command/src/main/java/io/dico/dicore/command/parameter/type/IParameterTypeSelector.java
+++ b/dicore3/command/src/main/java/io/dico/dicore/command/parameter/type/IParameterTypeSelector.java
@@ -1,44 +1,44 @@
-package io.dico.dicore.command.parameter.type;
-
-import java.lang.annotation.Annotation;
-
-/**
- * An interface for an object that stores parameter types by {@link ParameterKey} and finds appropriate types for {@link ParameterKey parameterKeys}
- */
-public interface IParameterTypeSelector {
-
- <TReturn, TParamInfo> ParameterType<TReturn, TParamInfo> selectExact(ParameterKey key);
-
- //<TReturn, TParamInfo> ParameterType<TReturn, TParamInfo> selectExactOrSubclass(ParameterKey key);
-
- <TReturn, TParamInfo> ParameterType<TReturn, TParamInfo> selectAny(ParameterKey key);
-
-
- default <TReturn, TParamInfo> ParameterType<TReturn, TParamInfo> selectExact(Class<?> returnType) {
- return selectExact(returnType, null);
- }
-
- default <TReturn, TParamInfo> ParameterType<TReturn, TParamInfo> selectExact(Class<?> returnType, Class<? extends Annotation> annotationClass) {
- return selectExact(new ParameterKey(returnType, annotationClass));
- }
-
- /*
- default <TReturn, TParamInfo> ParameterType<TReturn, TParamInfo> selectExactOrSubclass(Class<?> returnType) {
- return selectExactOrSubclass(returnType, null);
- }
-
- default <TReturn, TParamInfo> ParameterType<TReturn, TParamInfo> selectExactOrSubclass(Class<?> returnType, Class<? extends Annotation> annotationClass) {
- return selectExactOrSubclass(new ParameterKey(returnType, annotationClass));
- }
- */
- default <TReturn, TParamInfo> ParameterType<TReturn, TParamInfo> selectAny(Class<?> returnType) {
- return selectAny(returnType, null);
- }
-
- default <TReturn, TParamInfo> ParameterType<TReturn, TParamInfo> selectAny(Class<?> returnType, Class<? extends Annotation> annotationClass) {
- return selectAny(new ParameterKey(returnType, annotationClass));
- }
-
- void addType(boolean infolessAlias, ParameterType<?, ?> type);
-
-}
+package io.dico.dicore.command.parameter.type;
+
+import java.lang.annotation.Annotation;
+
+/**
+ * An interface for an object that stores parameter types by {@link ParameterKey} and finds appropriate types for {@link ParameterKey parameterKeys}
+ */
+public interface IParameterTypeSelector {
+
+ <TReturn, TParamInfo> ParameterType<TReturn, TParamInfo> selectExact(ParameterKey key);
+
+ //<TReturn, TParamInfo> ParameterType<TReturn, TParamInfo> selectExactOrSubclass(ParameterKey key);
+
+ <TReturn, TParamInfo> ParameterType<TReturn, TParamInfo> selectAny(ParameterKey key);
+
+
+ default <TReturn, TParamInfo> ParameterType<TReturn, TParamInfo> selectExact(Class<?> returnType) {
+ return selectExact(returnType, null);
+ }
+
+ default <TReturn, TParamInfo> ParameterType<TReturn, TParamInfo> selectExact(Class<?> returnType, Class<? extends Annotation> annotationClass) {
+ return selectExact(new ParameterKey(returnType, annotationClass));
+ }
+
+ /*
+ default <TReturn, TParamInfo> ParameterType<TReturn, TParamInfo> selectExactOrSubclass(Class<?> returnType) {
+ return selectExactOrSubclass(returnType, null);
+ }
+
+ default <TReturn, TParamInfo> ParameterType<TReturn, TParamInfo> selectExactOrSubclass(Class<?> returnType, Class<? extends Annotation> annotationClass) {
+ return selectExactOrSubclass(new ParameterKey(returnType, annotationClass));
+ }
+ */
+ default <TReturn, TParamInfo> ParameterType<TReturn, TParamInfo> selectAny(Class<?> returnType) {
+ return selectAny(returnType, null);
+ }
+
+ default <TReturn, TParamInfo> ParameterType<TReturn, TParamInfo> selectAny(Class<?> returnType, Class<? extends Annotation> annotationClass) {
+ return selectAny(new ParameterKey(returnType, annotationClass));
+ }
+
+ void addType(boolean infolessAlias, ParameterType<?, ?> type);
+
+}
diff --git a/dicore3/command/src/main/java/io/dico/dicore/command/parameter/type/MapBasedParameterTypeSelector.java b/dicore3/command/src/main/java/io/dico/dicore/command/parameter/type/MapBasedParameterTypeSelector.java
index d407f87..ef86eab 100644
--- a/dicore3/command/src/main/java/io/dico/dicore/command/parameter/type/MapBasedParameterTypeSelector.java
+++ b/dicore3/command/src/main/java/io/dico/dicore/command/parameter/type/MapBasedParameterTypeSelector.java
@@ -1,114 +1,114 @@
-package io.dico.dicore.command.parameter.type;
-
-import java.lang.annotation.Annotation;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Map based implementation of {@link IParameterTypeSelector}
- */
-public class MapBasedParameterTypeSelector implements IParameterTypeSelector {
- static final MapBasedParameterTypeSelector defaultSelector = new MapBasedParameterTypeSelector(false);
- private final Map<ParameterKey, ParameterType<?, ?>> parameterTypeMap;
- private final boolean useDefault;
-
- public MapBasedParameterTypeSelector(boolean useDefault) {
- this.parameterTypeMap = new HashMap<>();
- this.useDefault = useDefault;
- }
-
- @Override
- public <TReturn, TParamInfo> ParameterType<TReturn, TParamInfo> selectExact(ParameterKey key) {
- ParameterType<?, ?> out = parameterTypeMap.get(key);
- if (useDefault && out == null) {
- out = defaultSelector.selectExact(key);
- }
- if (out == null && key.getReturnType().isEnum()) {
- //noinspection unchecked
- out = new EnumParameterType(key.getReturnType());
- addType(false, out);
- }
- return cast(out);
- }
-
- @Override
- public <TReturn, TParamInfo> ParameterType<TReturn, TParamInfo> selectAny(ParameterKey key) {
- ParameterType<TReturn, TParamInfo> exact = selectExact(key);
- if (exact != null) {
- return exact;
- }
-
- if (key.getAnnotationClass() != null) {
- exact = selectExact(new ParameterKey(key.getReturnType()));
- if (exact != null) {
- return exact;
- }
- }
-
- Class<?> returnType = key.getReturnType();
- Class<? extends Annotation> annotationClass = key.getAnnotationClass();
-
- ParameterType<?, ?> out = selectByReturnType(parameterTypeMap, returnType, annotationClass, false);
- if (out == null && useDefault) {
- out = selectByReturnType(defaultSelector.parameterTypeMap, returnType, annotationClass, false);
- }
- if (out == null) {
- out = selectByReturnType(parameterTypeMap, returnType, annotationClass, true);
- }
- if (out == null && useDefault) {
- out = selectByReturnType(defaultSelector.parameterTypeMap, returnType, annotationClass, true);
- }
- return cast(out);
- }
-
- private static ParameterType<?, ?> selectByReturnType(Map<ParameterKey, ParameterType<?, ?>> map, Class<?> returnType,
- Class<? extends Annotation> annotationClass, boolean allowSubclass) {
- ParameterType<?, ?> out = null;
- if (allowSubclass) {
- for (ParameterType<?, ?> type : map.values()) {
- if (returnType.isAssignableFrom(type.getReturnType())) {
- if (annotationClass == type.getAnnotationClass()) {
- out = type;
- break;
- }
- if (out == null) {
- out = type;
- }
- }
- }
- } else {
- for (ParameterType<?, ?> type : map.values()) {
- if (returnType == type.getReturnType()) {
- if (annotationClass == type.getAnnotationClass()) {
- out = type;
- break;
- }
- if (out == null) {
- out = type;
- }
- }
- }
- }
- return out;
- }
-
- private static <T> T cast(Object o) {
- //noinspection unchecked
- return (T) o;
- }
-
- @Override
- public void addType(boolean infolessAlias, ParameterType<?, ?> type) {
- parameterTypeMap.put(type.getTypeKey(), type);
-
- if (infolessAlias) {
- parameterTypeMap.putIfAbsent(type.getInfolessTypeKey(), type);
- }
- }
-
- static {
- // registers default parameter types
- ParameterTypes.clinit();
- }
-
-}
+package io.dico.dicore.command.parameter.type;
+
+import java.lang.annotation.Annotation;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Map based implementation of {@link IParameterTypeSelector}
+ */
+public class MapBasedParameterTypeSelector implements IParameterTypeSelector {
+ static final MapBasedParameterTypeSelector defaultSelector = new MapBasedParameterTypeSelector(false);
+ private final Map<ParameterKey, ParameterType<?, ?>> parameterTypeMap;
+ private final boolean useDefault;
+
+ public MapBasedParameterTypeSelector(boolean useDefault) {
+ this.parameterTypeMap = new HashMap<>();
+ this.useDefault = useDefault;
+ }
+
+ @Override
+ public <TReturn, TParamInfo> ParameterType<TReturn, TParamInfo> selectExact(ParameterKey key) {
+ ParameterType<?, ?> out = parameterTypeMap.get(key);
+ if (useDefault && out == null) {
+ out = defaultSelector.selectExact(key);
+ }
+ if (out == null && key.getReturnType().isEnum()) {
+ //noinspection unchecked
+ out = new EnumParameterType(key.getReturnType());
+ addType(false, out);
+ }
+ return cast(out);
+ }
+
+ @Override
+ public <TReturn, TParamInfo> ParameterType<TReturn, TParamInfo> selectAny(ParameterKey key) {
+ ParameterType<TReturn, TParamInfo> exact = selectExact(key);
+ if (exact != null) {
+ return exact;
+ }
+
+ if (key.getAnnotationClass() != null) {
+ exact = selectExact(new ParameterKey(key.getReturnType()));
+ if (exact != null) {
+ return exact;
+ }
+ }
+
+ Class<?> returnType = key.getReturnType();
+ Class<? extends Annotation> annotationClass = key.getAnnotationClass();
+
+ ParameterType<?, ?> out = selectByReturnType(parameterTypeMap, returnType, annotationClass, false);
+ if (out == null && useDefault) {
+ out = selectByReturnType(defaultSelector.parameterTypeMap, returnType, annotationClass, false);
+ }
+ if (out == null) {
+ out = selectByReturnType(parameterTypeMap, returnType, annotationClass, true);
+ }
+ if (out == null && useDefault) {
+ out = selectByReturnType(defaultSelector.parameterTypeMap, returnType, annotationClass, true);
+ }
+ return cast(out);
+ }
+
+ private static ParameterType<?, ?> selectByReturnType(Map<ParameterKey, ParameterType<?, ?>> map, Class<?> returnType,
+ Class<? extends Annotation> annotationClass, boolean allowSubclass) {
+ ParameterType<?, ?> out = null;
+ if (allowSubclass) {
+ for (ParameterType<?, ?> type : map.values()) {
+ if (returnType.isAssignableFrom(type.getReturnType())) {
+ if (annotationClass == type.getAnnotationClass()) {
+ out = type;
+ break;
+ }
+ if (out == null) {
+ out = type;
+ }
+ }
+ }
+ } else {
+ for (ParameterType<?, ?> type : map.values()) {
+ if (returnType == type.getReturnType()) {
+ if (annotationClass == type.getAnnotationClass()) {
+ out = type;
+ break;
+ }
+ if (out == null) {
+ out = type;
+ }
+ }
+ }
+ }
+ return out;
+ }
+
+ private static <T> T cast(Object o) {
+ //noinspection unchecked
+ return (T) o;
+ }
+
+ @Override
+ public void addType(boolean infolessAlias, ParameterType<?, ?> type) {
+ parameterTypeMap.put(type.getTypeKey(), type);
+
+ if (infolessAlias) {
+ parameterTypeMap.putIfAbsent(type.getInfolessTypeKey(), type);
+ }
+ }
+
+ static {
+ // registers default parameter types
+ ParameterTypes.clinit();
+ }
+
+}
diff --git a/dicore3/command/src/main/java/io/dico/dicore/command/parameter/type/ParameterConfig.java b/dicore3/command/src/main/java/io/dico/dicore/command/parameter/type/ParameterConfig.java
index dbd7590..d33932b 100644
--- a/dicore3/command/src/main/java/io/dico/dicore/command/parameter/type/ParameterConfig.java
+++ b/dicore3/command/src/main/java/io/dico/dicore/command/parameter/type/ParameterConfig.java
@@ -1,80 +1,80 @@
-package io.dico.dicore.command.parameter.type;
-
-import io.dico.dicore.Reflection;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Constructor;
-
-/**
- * This class serves the purpose of having annotated parameter configurations (such as ranges for number parameters).
- * Such configurations must be possible to obtain without using annotations, and as such, there should be a class conveying the information
- * that is separate from the annotation itself. This class acts as a bridge from the annotation to said class conveying the information.
- *
- * @param <TAnnotation> the annotation type for parameters
- * @param <TParamInfo> the object type that holds the information required in memory
- */
-public abstract class ParameterConfig<TAnnotation extends Annotation, TParamInfo> implements Comparable<ParameterConfig<?, ?>> {
- private final Class<TAnnotation> annotationClass;
- // protected final TParamInfo defaultValue;
-
- public ParameterConfig(Class<TAnnotation> annotationClass/*, TParamInfo defaultValue*/) {
- this.annotationClass = annotationClass;
- //this.defaultValue = defaultValue;
- }
-
- public final Class<TAnnotation> getAnnotationClass() {
- return annotationClass;
- }
- /*
- public TParamInfo getDefaultValue() {
- return defaultValue;
- }*/
-
- protected abstract TParamInfo toParameterInfo(TAnnotation annotation);
-
- public TParamInfo getParameterInfo(Annotation annotation) {
- //noinspection unchecked
- return toParameterInfo((TAnnotation) annotation);
- }
-
- public static <TAnnotation extends Annotation, TParamInfo> ParameterConfig<TAnnotation, TParamInfo>
- includeMemoryClass(Class<TAnnotation> annotationClass, Class<TParamInfo> memoryClass) {
- Constructor<TParamInfo> constructor;
- //TParamInfo defaultValue;
- try {
- constructor = memoryClass.getConstructor(annotationClass);
- //defaultValue = Reflection.getStaticFieldValue(annotationClass, "DEFAULT");
- } catch (NoSuchMethodException | IllegalArgumentException ex) {
- throw new IllegalArgumentException(ex);
- }
- /*
- if (defaultValue == null) try {
- defaultValue = memoryClass.newInstance();
- } catch (IllegalAccessException | InstantiationException ex) {
- throw new IllegalArgumentException("Failed to get a default value for the param info", ex);
- }*/
-
- return new ParameterConfig<TAnnotation, TParamInfo>(annotationClass/*, defaultValue*/) {
-
- @Override
- public TParamInfo toParameterInfo(TAnnotation annotation) {
- try {
- return constructor.newInstance(annotation);
- } catch (Exception ex) {
- throw new RuntimeException(ex);
- }
- }
- };
- }
-
- public static <TAnnotation extends Annotation, TParamInfo> ParameterConfig<TAnnotation, TParamInfo> getMemoryClassFromField(Class<TAnnotation> annotationClass) {
- return ParameterConfig.includeMemoryClass(annotationClass, Reflection.getStaticFieldValue(annotationClass, "MEMORY_CLASS"));
- }
-
- @Override
- public int compareTo(ParameterConfig<?, ?> o) {
- return 0;
- }
-
-}
-
+package io.dico.dicore.command.parameter.type;
+
+import io.dico.dicore.Reflection;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Constructor;
+
+/**
+ * This class serves the purpose of having annotated parameter configurations (such as ranges for number parameters).
+ * Such configurations must be possible to obtain without using annotations, and as such, there should be a class conveying the information
+ * that is separate from the annotation itself. This class acts as a bridge from the annotation to said class conveying the information.
+ *
+ * @param <TAnnotation> the annotation type for parameters
+ * @param <TParamInfo> the object type that holds the information required in memory
+ */
+public abstract class ParameterConfig<TAnnotation extends Annotation, TParamInfo> implements Comparable<ParameterConfig<?, ?>> {
+ private final Class<TAnnotation> annotationClass;
+ // protected final TParamInfo defaultValue;
+
+ public ParameterConfig(Class<TAnnotation> annotationClass/*, TParamInfo defaultValue*/) {
+ this.annotationClass = annotationClass;
+ //this.defaultValue = defaultValue;
+ }
+
+ public final Class<TAnnotation> getAnnotationClass() {
+ return annotationClass;
+ }
+ /*
+ public TParamInfo getDefaultValue() {
+ return defaultValue;
+ }*/
+
+ protected abstract TParamInfo toParameterInfo(TAnnotation annotation);
+
+ public TParamInfo getParameterInfo(Annotation annotation) {
+ //noinspection unchecked
+ return toParameterInfo((TAnnotation) annotation);
+ }
+
+ public static <TAnnotation extends Annotation, TParamInfo> ParameterConfig<TAnnotation, TParamInfo>
+ includeMemoryClass(Class<TAnnotation> annotationClass, Class<TParamInfo> memoryClass) {
+ Constructor<TParamInfo> constructor;
+ //TParamInfo defaultValue;
+ try {
+ constructor = memoryClass.getConstructor(annotationClass);
+ //defaultValue = Reflection.getStaticFieldValue(annotationClass, "DEFAULT");
+ } catch (NoSuchMethodException | IllegalArgumentException ex) {
+ throw new IllegalArgumentException(ex);
+ }
+ /*
+ if (defaultValue == null) try {
+ defaultValue = memoryClass.newInstance();
+ } catch (IllegalAccessException | InstantiationException ex) {
+ throw new IllegalArgumentException("Failed to get a default value for the param info", ex);
+ }*/
+
+ return new ParameterConfig<TAnnotation, TParamInfo>(annotationClass/*, defaultValue*/) {
+
+ @Override
+ public TParamInfo toParameterInfo(TAnnotation annotation) {
+ try {
+ return constructor.newInstance(annotation);
+ } catch (Exception ex) {
+ throw new RuntimeException(ex);
+ }
+ }
+ };
+ }
+
+ public static <TAnnotation extends Annotation, TParamInfo> ParameterConfig<TAnnotation, TParamInfo> getMemoryClassFromField(Class<TAnnotation> annotationClass) {
+ return ParameterConfig.includeMemoryClass(annotationClass, Reflection.getStaticFieldValue(annotationClass, "MEMORY_CLASS"));
+ }
+
+ @Override
+ public int compareTo(ParameterConfig<?, ?> o) {
+ return 0;
+ }
+
+}
+
diff --git a/dicore3/command/src/main/java/io/dico/dicore/command/parameter/type/ParameterType.java b/dicore3/command/src/main/java/io/dico/dicore/command/parameter/type/ParameterType.java
index e1a62fa..e9cca7f 100644
--- a/dicore3/command/src/main/java/io/dico/dicore/command/parameter/type/ParameterType.java
+++ b/dicore3/command/src/main/java/io/dico/dicore/command/parameter/type/ParameterType.java
@@ -1,149 +1,149 @@
-package io.dico.dicore.command.parameter.type;
-
-import io.dico.dicore.Reflection;
-import io.dico.dicore.command.CommandException;
-import io.dico.dicore.command.ExecutionContext;
-import io.dico.dicore.command.annotation.Range;
-import io.dico.dicore.command.parameter.ArgumentBuffer;
-import io.dico.dicore.command.parameter.Parameter;
-import org.bukkit.Location;
-import org.bukkit.command.CommandSender;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
-
-/**
- * A parameter type.
- * Takes care of parsing, default values as well as completions.
- *
- * @param <TReturn> type of the parameter
- * @param <TParamInfo> the info object type for the parameter (Example: {@link Range.Memory}
- */
-public abstract class ParameterType<TReturn, TParamInfo> {
- private final Class<TReturn> returnType;
- private final ParameterConfig<?, TParamInfo> parameterConfig;
- protected final ParameterType<TReturn, TParamInfo> otherType; // flag or non-flag, depending on current
-
- public ParameterType(Class<TReturn> returnType) {
- this(returnType, null);
- }
-
- public ParameterType(Class<TReturn> returnType, ParameterConfig<?, TParamInfo> paramConfig) {
- this.returnType = Objects.requireNonNull(returnType);
- this.parameterConfig = paramConfig;
-
- ParameterType<TReturn, TParamInfo> otherType = flagTypeParameter();
- this.otherType = otherType == null ? this : otherType;
- }
-
- protected ParameterType(Class<TReturn> returnType, ParameterConfig<?, TParamInfo> parameterConfig, ParameterType<TReturn, TParamInfo> otherType) {
- this.returnType = returnType;
- this.parameterConfig = parameterConfig;
- this.otherType = otherType;
- }
-
- public int getExpectedAmountOfConsumedArguments() {
- return 1;
- }
-
- public boolean canBeFlag() {
- return this == otherType;
- }
-
- public boolean isFlagExplicitly() {
- return this instanceof FlagParameterType;
- }
-
- /**
- * @return The return type
- */
- public final Class<TReturn> getReturnType() {
- return returnType;
- }
-
- public final Class<?> getAnnotationClass() {
- return parameterConfig == null ? null : parameterConfig.getAnnotationClass();
- }
-
- public final ParameterConfig<?, TParamInfo> getParameterConfig() {
- return parameterConfig;
- }
-
- public ParameterKey getTypeKey() {
- return new ParameterKey(returnType, parameterConfig != null ? parameterConfig.getAnnotationClass() : null);
- }
-
- public ParameterKey getInfolessTypeKey() {
- return new ParameterKey(returnType, null);
- }
-
- protected FlagParameterType<TReturn, TParamInfo> flagTypeParameter() {
- return null;
- }
-
- public ParameterType<TReturn, TParamInfo> asFlagParameter() {
- return canBeFlag() ? this : otherType;
- }
-
- public ParameterType<TReturn, TParamInfo> asNormalParameter() {
- return isFlagExplicitly() ? otherType : this;
- }
-
- public abstract TReturn parse(Parameter<TReturn, TParamInfo> parameter, CommandSender sender, ArgumentBuffer buffer) throws CommandException;
-
- public TReturn parseForContext(Parameter<TReturn, TParamInfo> parameter, ExecutionContext context, ArgumentBuffer buffer) throws CommandException {
- return parse(parameter, context.getSender(), buffer);
- }
-
- public TReturn getDefaultValue(Parameter<TReturn, TParamInfo> parameter, CommandSender sender, ArgumentBuffer buffer) throws CommandException {
- return null;
- }
-
- public TReturn getDefaultValueForContext(Parameter<TReturn, TParamInfo> parameter, ExecutionContext context, ArgumentBuffer buffer) throws CommandException {
- return getDefaultValue(parameter, context.getSender(), buffer);
- }
-
- public List<String> complete(Parameter<TReturn, TParamInfo> parameter, CommandSender sender, Location location, ArgumentBuffer buffer) {
- return Collections.emptyList();
- }
-
- public List<String> completeForContext(Parameter<TReturn, TParamInfo> parameter, ExecutionContext context, Location location, ArgumentBuffer buffer) {
- return complete(parameter, context.getSender(), location, buffer);
- }
-
- protected static abstract class FlagParameterType<TResult, TParamInfo> extends ParameterType<TResult, TParamInfo> {
-
- protected FlagParameterType(ParameterType<TResult, TParamInfo> otherType) {
- super(otherType.returnType, otherType.parameterConfig, otherType);
- }
-
- @Override
- public int getExpectedAmountOfConsumedArguments() {
- return otherType.getExpectedAmountOfConsumedArguments();
- }
-
- @Override
- public boolean canBeFlag() {
- return true;
- }
-
- @Override
- protected final FlagParameterType<TResult, TParamInfo> flagTypeParameter() {
- return this;
- }
-
- @Override
- public ParameterType<TResult, TParamInfo> asFlagParameter() {
- return this;
- }
-
- @Override
- public ParameterType<TResult, TParamInfo> asNormalParameter() {
- return otherType;
- }
-
- }
-
-}
+package io.dico.dicore.command.parameter.type;
+
+import io.dico.dicore.Reflection;
+import io.dico.dicore.command.CommandException;
+import io.dico.dicore.command.ExecutionContext;
+import io.dico.dicore.command.annotation.Range;
+import io.dico.dicore.command.parameter.ArgumentBuffer;
+import io.dico.dicore.command.parameter.Parameter;
+import org.bukkit.Location;
+import org.bukkit.command.CommandSender;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * A parameter type.
+ * Takes care of parsing, default values as well as completions.
+ *
+ * @param <TReturn> type of the parameter
+ * @param <TParamInfo> the info object type for the parameter (Example: {@link Range.Memory}
+ */
+public abstract class ParameterType<TReturn, TParamInfo> {
+ private final Class<TReturn> returnType;
+ private final ParameterConfig<?, TParamInfo> parameterConfig;
+ protected final ParameterType<TReturn, TParamInfo> otherType; // flag or non-flag, depending on current
+
+ public ParameterType(Class<TReturn> returnType) {
+ this(returnType, null);
+ }
+
+ public ParameterType(Class<TReturn> returnType, ParameterConfig<?, TParamInfo> paramConfig) {
+ this.returnType = Objects.requireNonNull(returnType);
+ this.parameterConfig = paramConfig;
+
+ ParameterType<TReturn, TParamInfo> otherType = flagTypeParameter();
+ this.otherType = otherType == null ? this : otherType;
+ }
+
+ protected ParameterType(Class<TReturn> returnType, ParameterConfig<?, TParamInfo> parameterConfig, ParameterType<TReturn, TParamInfo> otherType) {
+ this.returnType = returnType;
+ this.parameterConfig = parameterConfig;
+ this.otherType = otherType;
+ }
+
+ public int getExpectedAmountOfConsumedArguments() {
+ return 1;
+ }
+
+ public boolean canBeFlag() {
+ return this == otherType;
+ }
+
+ public boolean isFlagExplicitly() {
+ return this instanceof FlagParameterType;
+ }
+
+ /**
+ * @return The return type
+ */
+ public final Class<TReturn> getReturnType() {
+ return returnType;
+ }
+
+ public final Class<?> getAnnotationClass() {
+ return parameterConfig == null ? null : parameterConfig.getAnnotationClass();
+ }
+
+ public final ParameterConfig<?, TParamInfo> getParameterConfig() {
+ return parameterConfig;
+ }
+
+ public ParameterKey getTypeKey() {
+ return new ParameterKey(returnType, parameterConfig != null ? parameterConfig.getAnnotationClass() : null);
+ }
+
+ public ParameterKey getInfolessTypeKey() {
+ return new ParameterKey(returnType, null);
+ }
+
+ protected FlagParameterType<TReturn, TParamInfo> flagTypeParameter() {
+ return null;
+ }
+
+ public ParameterType<TReturn, TParamInfo> asFlagParameter() {
+ return canBeFlag() ? this : otherType;
+ }
+
+ public ParameterType<TReturn, TParamInfo> asNormalParameter() {
+ return isFlagExplicitly() ? otherType : this;
+ }
+
+ public abstract TReturn parse(Parameter<TReturn, TParamInfo> parameter, CommandSender sender, ArgumentBuffer buffer) throws CommandException;
+
+ public TReturn parseForContext(Parameter<TReturn, TParamInfo> parameter, ExecutionContext context, ArgumentBuffer buffer) throws CommandException {
+ return parse(parameter, context.getSender(), buffer);
+ }
+
+ public TReturn getDefaultValue(Parameter<TReturn, TParamInfo> parameter, CommandSender sender, ArgumentBuffer buffer) throws CommandException {
+ return null;
+ }
+
+ public TReturn getDefaultValueForContext(Parameter<TReturn, TParamInfo> parameter, ExecutionContext context, ArgumentBuffer buffer) throws CommandException {
+ return getDefaultValue(parameter, context.getSender(), buffer);
+ }
+
+ public List<String> complete(Parameter<TReturn, TParamInfo> parameter, CommandSender sender, Location location, ArgumentBuffer buffer) {
+ return Collections.emptyList();
+ }
+
+ public List<String> completeForContext(Parameter<TReturn, TParamInfo> parameter, ExecutionContext context, Location location, ArgumentBuffer buffer) {
+ return complete(parameter, context.getSender(), location, buffer);
+ }
+
+ protected static abstract class FlagParameterType<TResult, TParamInfo> extends ParameterType<TResult, TParamInfo> {
+
+ protected FlagParameterType(ParameterType<TResult, TParamInfo> otherType) {
+ super(otherType.returnType, otherType.parameterConfig, otherType);
+ }
+
+ @Override
+ public int getExpectedAmountOfConsumedArguments() {
+ return otherType.getExpectedAmountOfConsumedArguments();
+ }
+
+ @Override
+ public boolean canBeFlag() {
+ return true;
+ }
+
+ @Override
+ protected final FlagParameterType<TResult, TParamInfo> flagTypeParameter() {
+ return this;
+ }
+
+ @Override
+ public ParameterType<TResult, TParamInfo> asFlagParameter() {
+ return this;
+ }
+
+ @Override
+ public ParameterType<TResult, TParamInfo> asNormalParameter() {
+ return otherType;
+ }
+
+ }
+
+}
diff --git a/dicore3/command/src/main/java/io/dico/dicore/command/parameter/type/SimpleParameterType.java b/dicore3/command/src/main/java/io/dico/dicore/command/parameter/type/SimpleParameterType.java
index ecf19ce..667b2c7 100644
--- a/dicore3/command/src/main/java/io/dico/dicore/command/parameter/type/SimpleParameterType.java
+++ b/dicore3/command/src/main/java/io/dico/dicore/command/parameter/type/SimpleParameterType.java
@@ -1,31 +1,31 @@
-package io.dico.dicore.command.parameter.type;
-
-import io.dico.dicore.command.CommandException;
-import io.dico.dicore.command.parameter.ArgumentBuffer;
-import io.dico.dicore.command.parameter.Parameter;
-import org.bukkit.command.CommandSender;
-
-/**
- * An abstraction for parameter types that only parse a single argument
- *
- * @param <TReturn> the parameter type
- * @param <TParamInfo> parameter info object type
- */
-public abstract class SimpleParameterType<TReturn, TParamInfo> extends ParameterType<TReturn, TParamInfo> {
-
- public SimpleParameterType(Class<TReturn> returnType) {
- super(returnType);
- }
-
- public SimpleParameterType(Class<TReturn> returnType, ParameterConfig<?, TParamInfo> paramConfig) {
- super(returnType, paramConfig);
- }
-
- protected abstract TReturn parse(Parameter<TReturn, TParamInfo> parameter, CommandSender sender, String input) throws CommandException;
-
- @Override
- public TReturn parse(Parameter<TReturn, TParamInfo> parameter, CommandSender sender, ArgumentBuffer buffer) throws CommandException {
- return parse(parameter, sender, buffer.requireNext(parameter.getName()));
- }
-
-}
+package io.dico.dicore.command.parameter.type;
+
+import io.dico.dicore.command.CommandException;
+import io.dico.dicore.command.parameter.ArgumentBuffer;
+import io.dico.dicore.command.parameter.Parameter;
+import org.bukkit.command.CommandSender;
+
+/**
+ * An abstraction for parameter types that only parse a single argument
+ *
+ * @param <TReturn> the parameter type
+ * @param <TParamInfo> parameter info object type
+ */
+public abstract class SimpleParameterType<TReturn, TParamInfo> extends ParameterType<TReturn, TParamInfo> {
+
+ public SimpleParameterType(Class<TReturn> returnType) {
+ super(returnType);
+ }
+
+ public SimpleParameterType(Class<TReturn> returnType, ParameterConfig<?, TParamInfo> paramConfig) {
+ super(returnType, paramConfig);
+ }
+
+ protected abstract TReturn parse(Parameter<TReturn, TParamInfo> parameter, CommandSender sender, String input) throws CommandException;
+
+ @Override
+ public TReturn parse(Parameter<TReturn, TParamInfo> parameter, CommandSender sender, ArgumentBuffer buffer) throws CommandException {
+ return parse(parameter, sender, buffer.requireNext(parameter.getName()));
+ }
+
+}