Document new and deprecated methods, catch exceptions
This commit is contained in:
1 parent
aea76d9764
commit
5ab4a9e442
2 files changed
+59
-21
No files matched your search
@@ -25,6 +25,7 @@ import carpet.script.value.ValueConversions;
|
|||||||
* <p>{@link SimpleTypeConverter}s are reused whenever asked for one, since they don't have any complexity.</p>
|
* <p>{@link SimpleTypeConverter}s are reused whenever asked for one, since they don't have any complexity.</p>
|
||||||
*
|
*
|
||||||
* @see #registerType(Class, Class, Function, String)
|
* @see #registerType(Class, Class, Function, String)
|
||||||
|
* @see #registerType(Class, Class, BiFunction, String)
|
||||||
*
|
*
|
||||||
* @param <T> The type of the required input {@link Value}
|
* @param <T> The type of the required input {@link Value}
|
||||||
* @param <R> The type that this converter converts to
|
* @param <R> The type that this converter converts to
|
||||||
@@ -52,14 +53,29 @@ public final class SimpleTypeConverter<T extends Value, R> implements ValueConve
|
|||||||
private final String typeName;
|
private final String typeName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>The default constructor for {@link SimpleTypeConverter}.</p>
|
* Same as {@link #SimpleTypeConverter(Class, BiFunction, String)}, but without the converter function taking a {@link Context}
|
||||||
|
*
|
||||||
|
* @param inputType The required type for the input {@link Value}
|
||||||
|
* @param converter The function to convert an instance of inputType into R, with the context of the call.
|
||||||
|
* @param typeName The name of the type for error messages
|
||||||
|
*
|
||||||
|
* @see #SimpleTypeConverter(Class, BiFunction, String)
|
||||||
|
*/
|
||||||
|
public SimpleTypeConverter(final Class<T> inputType, final Function<T, R> converter, final String typeName)
|
||||||
|
{
|
||||||
|
this(inputType, (v, c) -> converter.apply(v), typeName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>A constructor for {@link SimpleTypeConverter}.</p>
|
||||||
*
|
*
|
||||||
* <p>This is public in order to provide an implementation to use when registering {@link ValueConverter}s for the {@link Param.Strict} annotation
|
* <p>This is public in order to provide an implementation to use when registering {@link ValueConverter}s for the {@link Param.Strict} annotation
|
||||||
* registry, and it's not intended way to register new {@link SimpleTypeConverter}</p> <p>Use {@link #registerType(Class, Class, Function, String)} for
|
* registry, and it's not intended way to register new {@link SimpleTypeConverter}</p> <p>Use {@link #registerType(Class, Class, Function, String)} for
|
||||||
* that.</p>
|
* that.</p>
|
||||||
*
|
*
|
||||||
* @param inputType The required type for the input {@link Value}
|
* @param inputType The required type for the input {@link Value}
|
||||||
* @param converter The function to convert an instance of inputType into R.
|
* @param converter The function to convert an instance of inputType into R, with the context of the call.
|
||||||
|
* @param typeName The name of the type for error messages
|
||||||
*/
|
*/
|
||||||
public SimpleTypeConverter(final Class<T> inputType, final BiFunction<T, Context, R> converter, final String typeName)
|
public SimpleTypeConverter(final Class<T> inputType, final BiFunction<T, Context, R> converter, final String typeName)
|
||||||
{
|
{
|
||||||
@@ -69,14 +85,6 @@ public final class SimpleTypeConverter<T extends Value, R> implements ValueConve
|
|||||||
this.typeName = typeName;
|
this.typeName = typeName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public SimpleTypeConverter(final Class<T> inputType, final Function<T, R> converter, final String typeName)
|
|
||||||
{
|
|
||||||
super();
|
|
||||||
this.converter = (v, c) -> converter.apply(v);
|
|
||||||
this.valueClass = inputType;
|
|
||||||
this.typeName = typeName;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getTypeName()
|
public String getTypeName()
|
||||||
{
|
{
|
||||||
@@ -114,6 +122,26 @@ public final class SimpleTypeConverter<T extends Value, R> implements ValueConve
|
|||||||
* when given {@link Value} cannot be converted to the {@code <R>}, to follow the {@link ValueConverter} contract, but it
|
* when given {@link Value} cannot be converted to the {@code <R>}, to follow the {@link ValueConverter} contract, but it
|
||||||
* can also throw an {@link InternalExpressionException} by itself if really necessary.
|
* can also throw an {@link InternalExpressionException} by itself if really necessary.
|
||||||
* @param typeName The name of the type, following the conventions of {@link ValueConverter#getTypeName()}
|
* @param typeName The name of the type, following the conventions of {@link ValueConverter#getTypeName()}
|
||||||
|
*
|
||||||
|
* @see #registerType(Class, Class, BiFunction, String)
|
||||||
|
*/
|
||||||
|
public static <T extends Value, R> void registerType(final Class<T> requiredInputType, final Class<R> outputType,
|
||||||
|
final Function<T, R> converter, final String typeName)
|
||||||
|
{
|
||||||
|
registerType(requiredInputType, outputType, (val, ctx) -> converter.apply(val), typeName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Registers a new conversion from a {@link Value} subclass to a Java type, with the context of the call.</p>
|
||||||
|
*
|
||||||
|
* @param <T> The {@link Value} subtype required for this conversion, for automatic checked casting
|
||||||
|
* @param <R> The type of the resulting object
|
||||||
|
* @param requiredInputType The {@link Class} of {@code <T>}
|
||||||
|
* @param outputType The {@link Class} of {@code <R>>}
|
||||||
|
* @param converter A function that converts from the given {@link Value} subtype to the given type. Should ideally return {@code null}
|
||||||
|
* when given {@link Value} cannot be converted to the {@code <R>}, to follow the {@link ValueConverter} contract, but it
|
||||||
|
* can also throw an {@link InternalExpressionException} by itself if really necessary.
|
||||||
|
* @param typeName The name of the type, following the conventions of {@link ValueConverter#getTypeName()}
|
||||||
*/
|
*/
|
||||||
public static <T extends Value, R> void registerType(final Class<T> requiredInputType, final Class<R> outputType,
|
public static <T extends Value, R> void registerType(final Class<T> requiredInputType, final Class<R> outputType,
|
||||||
final BiFunction<T, Context, R> converter, final String typeName)
|
final BiFunction<T, Context, R> converter, final String typeName)
|
||||||
@@ -121,10 +149,4 @@ public final class SimpleTypeConverter<T extends Value, R> implements ValueConve
|
|||||||
final SimpleTypeConverter<T, R> type = new SimpleTypeConverter<>(requiredInputType, converter, typeName);
|
final SimpleTypeConverter<T, R> type = new SimpleTypeConverter<>(requiredInputType, converter, typeName);
|
||||||
byResult.put(outputType, type);
|
byResult.put(outputType, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static <T extends Value, R> void registerType(final Class<T> requiredInputType, final Class<R> outputType,
|
|
||||||
final Function<T, R> converter, final String typeName)
|
|
||||||
{
|
|
||||||
registerType(requiredInputType, outputType, (val, ctx) -> converter.apply(val), typeName);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -49,8 +49,8 @@ public interface ValueConverter<R>
|
|||||||
* <p>Functions using the converter can use {@link #getTypeName()} to get the name of the type this was trying to convert to, in case they are not
|
* <p>Functions using the converter can use {@link #getTypeName()} to get the name of the type this was trying to convert to, in case they are not
|
||||||
* trying to convert to anything else, where it would be recommended to tell the user the name of the final type instead.</p>
|
* trying to convert to anything else, where it would be recommended to tell the user the name of the final type instead.</p>
|
||||||
*
|
*
|
||||||
* @param value The {@link Value} to convert
|
* @param value The {@link Value} to convert
|
||||||
* @param context
|
* @param context The {@link Context} of the call
|
||||||
* @return The converted value, or {@code null} if the conversion failed in the process
|
* @return The converted value, or {@code null} if the conversion failed in the process
|
||||||
* @apiNote <p>While most implementations of this method should and will return the type from this method, implementations that <b>require</b>
|
* @apiNote <p>While most implementations of this method should and will return the type from this method, implementations that <b>require</b>
|
||||||
* parameters from {@link #checkAndConvert(Iterator, Context, Context.Type)} or that require multiple parameters may decide to throw
|
* parameters from {@link #checkAndConvert(Iterator, Context, Context.Type)} or that require multiple parameters may decide to throw
|
||||||
@@ -65,10 +65,27 @@ public interface ValueConverter<R>
|
|||||||
*/
|
*/
|
||||||
@Nullable R convert(Value value, final Context context);
|
@Nullable R convert(Value value, final Context context);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Old version of {@link #convert(Value)} without taking a {@link Context}.<p>
|
||||||
|
*
|
||||||
|
* This shouldn't be used given converters now take a context in the convert function to allow for converting
|
||||||
|
* values in lists or other places without using static state.<p>
|
||||||
|
*
|
||||||
|
* @param value The value to convert
|
||||||
|
* @return A converted value
|
||||||
|
* @deprecated Calling this method instead of {@link #convert(Value, Context)} may not return values for some converters
|
||||||
|
*/
|
||||||
@Deprecated(forRemoval = true)
|
@Deprecated(forRemoval = true)
|
||||||
default R convert(final Value value)
|
default R convert(final Value value)
|
||||||
{
|
{
|
||||||
return convert(value, null);
|
try
|
||||||
|
{
|
||||||
|
return convert(value, null);
|
||||||
|
}
|
||||||
|
catch (NullPointerException e)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -185,8 +202,7 @@ public interface ValueConverter<R>
|
|||||||
* they may consume variable arguments, implement {@link #consumesVariableArgs()}</p> <p>This method holds the same nullability
|
* they may consume variable arguments, implement {@link #consumesVariableArgs()}</p> <p>This method holds the same nullability
|
||||||
* constraints as {@link #convert(Value, Context)}</p>
|
* constraints as {@link #convert(Value, Context)}</p>
|
||||||
* @param valueIterator An {@link Iterator} holding the {@link Value} to convert in next position
|
* @param valueIterator An {@link Iterator} holding the {@link Value} to convert in next position
|
||||||
* @param context The {@link Context} this function has been called with. This was used when this passed lazy values instead in order to
|
* @param context The {@link Context} this function has been called with
|
||||||
* evaluate, now it's used to get the context
|
|
||||||
* @param contextType The {@link Context.Type} that the original function was called with
|
* @param contextType The {@link Context.Type} that the original function was called with
|
||||||
* @return The next {@link Value} (s) converted to the type {@code <R>} of this {@link ValueConverter}
|
* @return The next {@link Value} (s) converted to the type {@code <R>} of this {@link ValueConverter}
|
||||||
* @implNote This method's default implementation runs the {@link #convert(Value, Context)} function in the next {@link Value} ignoring {@link Context} and
|
* @implNote This method's default implementation runs the {@link #convert(Value, Context)} function in the next {@link Value} ignoring {@link Context} and
|
||||||
|
|||||||
Reference in new issue
Block a user