aboutsummaryrefslogtreecommitdiff
path: root/velocity-engine-core/src/main/java
diff options
context:
space:
mode:
authorClaude Brisson <cbrisson@apache.org>2018-10-17 15:13:08 +0000
committerClaude Brisson <cbrisson@apache.org>2018-10-17 15:13:08 +0000
commit087f6f6b200664a12e3748eccdae1489d6709787 (patch)
treeb7069e976df61a65a10a01d79dba76840f68aebc /velocity-engine-core/src/main/java
parent4a86b6d5482a2cf20c7f2266172e83edaa743965 (diff)
downloadapache-velocity-engine-087f6f6b200664a12e3748eccdae1489d6709787.tar.gz
[VELOCITY-892] Conversions towards types done
git-svn-id: https://svn.apache.org/repos/asf/velocity/engine/branches/VELOCITY-892@1844123 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'velocity-engine-core/src/main/java')
-rw-r--r--velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/IntrospectionUtils.java64
-rw-r--r--velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/MethodMap.java20
-rw-r--r--velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/TypeConversionHandlerImpl.java346
3 files changed, 251 insertions, 179 deletions
diff --git a/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/IntrospectionUtils.java b/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/IntrospectionUtils.java
index 57f83e13..1eb4fb8f 100644
--- a/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/IntrospectionUtils.java
+++ b/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/IntrospectionUtils.java
@@ -21,7 +21,12 @@ package org.apache.velocity.util.introspection;
import org.apache.commons.lang3.reflect.TypeUtils;
+import java.lang.reflect.Array;
+import java.lang.reflect.GenericArrayType;
+import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
+import java.lang.reflect.TypeVariable;
+import java.lang.reflect.WildcardType;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
@@ -87,8 +92,43 @@ public class IntrospectionUtils
}
/**
- *
+ * returns the Class corresponding to a Type, if possible
*/
+ static Class getTypeClass(Type type)
+ {
+ if (type == null)
+ {
+ return null;
+ }
+ if (type instanceof Class)
+ {
+ return (Class)type;
+ }
+ else if (type instanceof ParameterizedType)
+ {
+ return (Class)((ParameterizedType)type).getRawType();
+ }
+ else if (type instanceof GenericArrayType)
+ {
+ Type componentType = ((GenericArrayType)type).getGenericComponentType();
+ Class componentClass = getTypeClass(componentType);
+ if (componentClass != null)
+ {
+ return Array.newInstance(componentClass, 0).getClass();
+ }
+ }
+ else if (type instanceof TypeVariable)
+ {
+ Type[] bounds = TypeUtils.getImplicitBounds((TypeVariable)type);
+ if (bounds.length == 1) return getTypeClass(bounds[0]);
+ }
+ else if (type instanceof WildcardType)
+ {
+ Type[] bounds = TypeUtils.getImplicitUpperBounds((WildcardType)type);
+ if (bounds.length == 1) return getTypeClass(bounds[0]);
+ }
+ return null;
+ }
/**
* Determines whether a type represented by a class object is
@@ -114,9 +154,9 @@ public class IntrospectionUtils
Class actual,
boolean possibleVarArg)
{
- if (formal instanceof Class)
+ Class formalClass = getTypeClass(formal);
+ if (formalClass != null)
{
- Class formalClass = (Class)formal;
/* if it's a null, it means the arg was null */
if (actual == null)
{
@@ -202,7 +242,12 @@ public class IntrospectionUtils
else
{
// no distinction between strict and implicit, not a big deal in this case
- return TypeUtils.isAssignable(actual, formal);
+ if (TypeUtils.isAssignable(actual, formal))
+ {
+ return true;
+ }
+ return possibleVarArg && TypeUtils.isArrayType(formal) &&
+ TypeUtils.isAssignable(actual, TypeUtils.getArrayComponentType(formal));
}
}
@@ -226,9 +271,9 @@ public class IntrospectionUtils
Class actual,
boolean possibleVarArg)
{
- if (formal instanceof Class)
+ Class formalClass = getTypeClass(formal);
+ if (formalClass != null)
{
- Class formalClass = (Class) formal;
/* Check for nullity */
if (actual == null)
{
@@ -279,7 +324,12 @@ public class IntrospectionUtils
else
{
// no distinction between strict and implicit, not a big deal in this case
- return TypeUtils.isAssignable(actual, formal);
+ if (TypeUtils.isAssignable(actual, formal))
+ {
+ return true;
+ }
+ return possibleVarArg && TypeUtils.isArrayType(formal) &&
+ TypeUtils.isAssignable(actual, TypeUtils.getArrayComponentType(formal));
}
}
}
diff --git a/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/MethodMap.java b/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/MethodMap.java
index 14a40aa1..2f7192eb 100644
--- a/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/MethodMap.java
+++ b/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/MethodMap.java
@@ -194,7 +194,7 @@ public class MethodMap
this.applicability = applicability;
this.methodTypes = method.getGenericParameterTypes();
this.specificity = compare(methodTypes, unboxedArgs);
- this.varargs = methodTypes.length > 0 && (methodTypes[methodTypes.length - 1] instanceof Class) && ((Class)methodTypes[methodTypes.length - 1]).isArray();
+ this.varargs = methodTypes.length > 0 && TypeUtils.isArrayType(methodTypes[methodTypes.length - 1]);
}
}
@@ -346,7 +346,7 @@ public class MethodMap
return MORE_SPECIFIC;
}
t2 = Arrays.copyOf(t2, t1.length);
- Type itemType = t2[l2 - 1] instanceof Class ? ((Class)t2[l2 - 1]).getComponentType() : null;
+ Type itemType = TypeUtils.getArrayComponentType(t2[l2 - 1]);
/* if item class is null, then it implies the vaarg is #1
* (and receives an empty array)
*/
@@ -375,7 +375,7 @@ public class MethodMap
return LESS_SPECIFIC;
}
t1 = Arrays.copyOf(t1, t2.length);
- Type itemType = t1[l1 - 1] instanceof Class ? ((Class)t1[l1 - 1]).getComponentType() : null;
+ Type itemType = TypeUtils.getArrayComponentType(t1[l1 - 1]);
/* if item class is null, then it implies the vaarg is #2
* (and receives an empty array)
*/
@@ -494,8 +494,8 @@ public class MethodMap
* If one method accepts varargs and the other does not,
* call the non-vararg one more specific.
*/
- boolean last1Array = t1IsVararag || !fixedLengths && (t1[t1.length - 1] instanceof Class) && ((Class)t1[t1.length - 1]).isArray();
- boolean last2Array = t2IsVararag || !fixedLengths && (t2[t2.length - 1] instanceof Class) && ((Class)t2[t2.length - 1]).isArray();
+ boolean last1Array = t1IsVararag || !fixedLengths && TypeUtils.isArrayType (t1[t1.length - 1]);
+ boolean last2Array = t2IsVararag || !fixedLengths && TypeUtils.isArrayType(t2[t2.length - 1]);
if (last1Array && !last2Array)
{
return LESS_SPECIFIC;
@@ -527,9 +527,7 @@ public class MethodMap
{
// if there's just one more methodArg than class arg
// and the last methodArg is an array, then treat it as a vararg
- if (methodArgs.length == classes.length + 1 &&
- (methodArgs[methodArgs.length - 1] instanceof Class) &&
- ((Class)methodArgs[methodArgs.length - 1]).isArray())
+ if (methodArgs.length == classes.length + 1 && TypeUtils.isArrayType(methodArgs[methodArgs.length - 1]))
{
// all the args preceding the vararg must match
for (int i = 0; i < classes.length; i++)
@@ -564,7 +562,7 @@ public class MethodMap
// (e.g. String when the method is expecting String...)
for(int i = 0; i < classes.length; ++i)
{
- boolean possibleVararg = i == classes.length - 1 && (methodArgs[i] instanceof Class) && ((Class)methodArgs[i]).isArray();
+ boolean possibleVararg = i == classes.length - 1 && TypeUtils.isArrayType(methodArgs[i]);
if (!isStrictConvertible(methodArgs[i], classes[i], possibleVararg))
{
if (isConvertible(methodArgs[i], classes[i], possibleVararg))
@@ -587,7 +585,7 @@ public class MethodMap
{
// check that the last methodArg is an array
Type lastarg = methodArgs[methodArgs.length - 1];
- if (!(lastarg instanceof Class) || !((Class)lastarg).isArray())
+ if (!TypeUtils.isArrayType(lastarg))
{
return NOT_CONVERTIBLE;
}
@@ -613,7 +611,7 @@ public class MethodMap
}
// check that all remaining arguments are convertible to the vararg type
- Class vararg = ((Class)lastarg).getComponentType();
+ Type vararg = TypeUtils.getArrayComponentType(lastarg);
for (int i = methodArgs.length - 1; i < classes.length; ++i)
{
if (!isStrictConvertible(vararg, classes[i], false))
diff --git a/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/TypeConversionHandlerImpl.java b/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/TypeConversionHandlerImpl.java
index 6f1670fb..b59cad23 100644
--- a/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/TypeConversionHandlerImpl.java
+++ b/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/TypeConversionHandlerImpl.java
@@ -19,7 +19,8 @@ package org.apache.velocity.util.introspection;
* under the License.
*/
-import org.apache.velocity.util.Pair;
+import org.apache.commons.lang3.reflect.TypeUtils;
+import org.apache.commons.lang3.tuple.Pair;
import java.lang.reflect.Type;
import java.util.HashMap;
@@ -41,7 +42,7 @@ public class TypeConversionHandlerImpl implements TypeConversionHandler
/**
* standard narrowing and string parsing conversions.
*/
- static Map<Pair<? extends Type, ? extends Class>, Converter> standardConverterMap;
+ static Map<Pair<String, String>, Converter> standardConverterMap;
/**
* basic toString converter
@@ -68,7 +69,26 @@ public class TypeConversionHandlerImpl implements TypeConversionHandler
/**
* a converters cache map, initialized with the standard narrowing and string parsing conversions.
*/
- Map<Pair<? extends Type, ? extends Class>, Converter> converterCacheMap;
+ Map<Pair<String, String>, Converter> converterCacheMap;
+
+ static final String BOOLEAN_TYPE = "boolean";
+ static final String BYTE_TYPE = "byte";
+ static final String SHORT_TYPE = "short";
+ static final String INTEGER_TYPE = "int";
+ static final String LONG_TYPE = "long";
+ static final String FLOAT_TYPE = "float";
+ static final String DOUBLE_TYPE = "double";
+ static final String CHARACTER_TYPE = "char";
+ static final String BOOLEAN_CLASS = "java.lang.Boolean";
+ static final String BYTE_CLASS = "java.lang.Byte";
+ static final String SHORT_CLASS = "java.lang.Short";
+ static final String INTEGER_CLASS = "java.lang.Integer";
+ static final String LONG_CLASS = "java.lang.Long";
+ static final String FLOAT_CLASS = "java.lang.Float";
+ static final String DOUBLE_CLASS = "java.lang.Double";
+ static final String NUMBER_CLASS = "java.lang.Number";
+ static final String CHARACTER_CLASS = "java.lang.Character";
+ static final String STRING_CLASS = "java.lang.String";
static
{
@@ -92,32 +112,32 @@ public class TypeConversionHandlerImpl implements TypeConversionHandler
return o == null ? null : ((Number) o).intValue() != 0;
}
};
- standardConverterMap.put(new Pair<>(Boolean.class, Byte.class), numberToBool);
- standardConverterMap.put(new Pair<>(Boolean.class, Short.class), numberToBool);
- standardConverterMap.put(new Pair<>(Boolean.class, Integer.class), numberToBool);
- standardConverterMap.put(new Pair<>(Boolean.class, Long.class), numberToBool);
- standardConverterMap.put(new Pair<>(Boolean.class, Float.class), numberToBool);
- standardConverterMap.put(new Pair<>(Boolean.class, Double.class), numberToBool);
- standardConverterMap.put(new Pair<>(Boolean.class, Number.class), numberToBool);
- standardConverterMap.put(new Pair<>(Boolean.class, Byte.TYPE), numberToBool);
- standardConverterMap.put(new Pair<>(Boolean.class, Short.TYPE), numberToBool);
- standardConverterMap.put(new Pair<>(Boolean.class, Integer.TYPE), numberToBool);
- standardConverterMap.put(new Pair<>(Boolean.class, Long.TYPE), numberToBool);
- standardConverterMap.put(new Pair<>(Boolean.class, Float.TYPE), numberToBool);
- standardConverterMap.put(new Pair<>(Boolean.class, Double.TYPE), numberToBool);
- standardConverterMap.put(new Pair<>(Boolean.TYPE, Byte.class), numberToBool);
- standardConverterMap.put(new Pair<>(Boolean.TYPE, Short.class), numberToBool);
- standardConverterMap.put(new Pair<>(Boolean.TYPE, Integer.class), numberToBool);
- standardConverterMap.put(new Pair<>(Boolean.TYPE, Long.class), numberToBool);
- standardConverterMap.put(new Pair<>(Boolean.TYPE, Float.class), numberToBool);
- standardConverterMap.put(new Pair<>(Boolean.TYPE, Double.class), numberToBool);
- standardConverterMap.put(new Pair<>(Boolean.TYPE, Number.class), numberToBool);
- standardConverterMap.put(new Pair<>(Boolean.TYPE, Byte.TYPE), numberToBool);
- standardConverterMap.put(new Pair<>(Boolean.TYPE, Short.TYPE), numberToBool);
- standardConverterMap.put(new Pair<>(Boolean.TYPE, Integer.TYPE), numberToBool);
- standardConverterMap.put(new Pair<>(Boolean.TYPE, Long.TYPE), numberToBool);
- standardConverterMap.put(new Pair<>(Boolean.TYPE, Float.TYPE), numberToBool);
- standardConverterMap.put(new Pair<>(Boolean.TYPE, Double.TYPE), numberToBool);
+ standardConverterMap.put(Pair.of(BOOLEAN_CLASS, BYTE_CLASS), numberToBool);
+ standardConverterMap.put(Pair.of(BOOLEAN_CLASS, SHORT_CLASS), numberToBool);
+ standardConverterMap.put(Pair.of(BOOLEAN_CLASS, INTEGER_CLASS), numberToBool);
+ standardConverterMap.put(Pair.of(BOOLEAN_CLASS, LONG_CLASS), numberToBool);
+ standardConverterMap.put(Pair.of(BOOLEAN_CLASS, FLOAT_CLASS), numberToBool);
+ standardConverterMap.put(Pair.of(BOOLEAN_CLASS, DOUBLE_CLASS), numberToBool);
+ standardConverterMap.put(Pair.of(BOOLEAN_CLASS, NUMBER_CLASS), numberToBool);
+ standardConverterMap.put(Pair.of(BOOLEAN_CLASS, BYTE_TYPE), numberToBool);
+ standardConverterMap.put(Pair.of(BOOLEAN_CLASS, SHORT_TYPE), numberToBool);
+ standardConverterMap.put(Pair.of(BOOLEAN_CLASS, INTEGER_TYPE), numberToBool);
+ standardConverterMap.put(Pair.of(BOOLEAN_CLASS, LONG_TYPE), numberToBool);
+ standardConverterMap.put(Pair.of(BOOLEAN_CLASS, FLOAT_TYPE), numberToBool);
+ standardConverterMap.put(Pair.of(BOOLEAN_CLASS, DOUBLE_TYPE), numberToBool);
+ standardConverterMap.put(Pair.of(BOOLEAN_TYPE, BYTE_CLASS), numberToBool);
+ standardConverterMap.put(Pair.of(BOOLEAN_TYPE, SHORT_CLASS), numberToBool);
+ standardConverterMap.put(Pair.of(BOOLEAN_TYPE, INTEGER_CLASS), numberToBool);
+ standardConverterMap.put(Pair.of(BOOLEAN_TYPE, LONG_CLASS), numberToBool);
+ standardConverterMap.put(Pair.of(BOOLEAN_TYPE, FLOAT_CLASS), numberToBool);
+ standardConverterMap.put(Pair.of(BOOLEAN_TYPE, DOUBLE_CLASS), numberToBool);
+ standardConverterMap.put(Pair.of(BOOLEAN_TYPE, NUMBER_CLASS), numberToBool);
+ standardConverterMap.put(Pair.of(BOOLEAN_TYPE, BYTE_TYPE), numberToBool);
+ standardConverterMap.put(Pair.of(BOOLEAN_TYPE, SHORT_TYPE), numberToBool);
+ standardConverterMap.put(Pair.of(BOOLEAN_TYPE, INTEGER_TYPE), numberToBool);
+ standardConverterMap.put(Pair.of(BOOLEAN_TYPE, LONG_TYPE), numberToBool);
+ standardConverterMap.put(Pair.of(BOOLEAN_TYPE, FLOAT_TYPE), numberToBool);
+ standardConverterMap.put(Pair.of(BOOLEAN_TYPE, DOUBLE_TYPE), numberToBool);
/* character -> boolean */
Converter<Boolean> charToBoolean = new Converter<Boolean>()
@@ -128,10 +148,10 @@ public class TypeConversionHandlerImpl implements TypeConversionHandler
return o == null ? null : (Character) o != 0;
}
};
- standardConverterMap.put(new Pair<>(Boolean.class, Character.class), charToBoolean);
- standardConverterMap.put(new Pair<>(Boolean.class, Character.TYPE), charToBoolean);
- standardConverterMap.put(new Pair<>(Boolean.TYPE, Character.class), charToBoolean);
- standardConverterMap.put(new Pair<>(Boolean.TYPE, Character.TYPE), charToBoolean);
+ standardConverterMap.put(Pair.of(BOOLEAN_CLASS, CHARACTER_CLASS), charToBoolean);
+ standardConverterMap.put(Pair.of(BOOLEAN_CLASS, CHARACTER_TYPE), charToBoolean);
+ standardConverterMap.put(Pair.of(BOOLEAN_TYPE, CHARACTER_CLASS), charToBoolean);
+ standardConverterMap.put(Pair.of(BOOLEAN_TYPE, CHARACTER_TYPE), charToBoolean);
/* string -> boolean */
Converter<Boolean> stringToBoolean = new Converter<Boolean>()
@@ -142,8 +162,8 @@ public class TypeConversionHandlerImpl implements TypeConversionHandler
return Boolean.valueOf(String.valueOf(o));
}
};
- standardConverterMap.put(new Pair<>(Boolean.class, String.class), stringToBoolean);
- standardConverterMap.put(new Pair<>(Boolean.TYPE, String.class), stringToBoolean);
+ standardConverterMap.put(Pair.of(BOOLEAN_CLASS, STRING_CLASS), stringToBoolean);
+ standardConverterMap.put(Pair.of(BOOLEAN_TYPE, STRING_CLASS), stringToBoolean);
/* narrowing towards byte */
Converter<Byte> narrowingToByte = new Converter<Byte>()
@@ -160,28 +180,28 @@ public class TypeConversionHandlerImpl implements TypeConversionHandler
return ((Number) o).byteValue();
}
};
- standardConverterMap.put(new Pair<>(Byte.class, Short.class), narrowingToByte);
- standardConverterMap.put(new Pair<>(Byte.class, Integer.class), narrowingToByte);
- standardConverterMap.put(new Pair<>(Byte.class, Long.class), narrowingToByte);
- standardConverterMap.put(new Pair<>(Byte.class, Float.class), narrowingToByte);
- standardConverterMap.put(new Pair<>(Byte.class, Double.class), narrowingToByte);
- standardConverterMap.put(new Pair<>(Byte.class, Number.class), narrowingToByte);
- standardConverterMap.put(new Pair<>(Byte.class, Short.TYPE), narrowingToByte);
- standardConverterMap.put(new Pair<>(Byte.class, Integer.TYPE), narrowingToByte);
- standardConverterMap.put(new Pair<>(Byte.class, Long.TYPE), narrowingToByte);
- standardConverterMap.put(new Pair<>(Byte.class, Float.TYPE), narrowingToByte);
- standardConverterMap.put(new Pair<>(Byte.class, Double.TYPE), narrowingToByte);
- standardConverterMap.put(new Pair<>(Byte.TYPE, Short.class), narrowingToByte);
- standardConverterMap.put(new Pair<>(Byte.TYPE, Integer.class), narrowingToByte);
- standardConverterMap.put(new Pair<>(Byte.TYPE, Long.class), narrowingToByte);
- standardConverterMap.put(new Pair<>(Byte.TYPE, Float.class), narrowingToByte);
- standardConverterMap.put(new Pair<>(Byte.TYPE, Double.class), narrowingToByte);
- standardConverterMap.put(new Pair<>(Byte.TYPE, Number.class), narrowingToByte);
- standardConverterMap.put(new Pair<>(Byte.TYPE, Short.TYPE), narrowingToByte);
- standardConverterMap.put(new Pair<>(Byte.TYPE, Integer.TYPE), narrowingToByte);
- standardConverterMap.put(new Pair<>(Byte.TYPE, Long.TYPE), narrowingToByte);
- standardConverterMap.put(new Pair<>(Byte.TYPE, Float.TYPE), narrowingToByte);
- standardConverterMap.put(new Pair<>(Byte.TYPE, Double.TYPE), narrowingToByte);
+ standardConverterMap.put(Pair.of(BYTE_CLASS, SHORT_CLASS), narrowingToByte);
+ standardConverterMap.put(Pair.of(BYTE_CLASS, INTEGER_CLASS), narrowingToByte);
+ standardConverterMap.put(Pair.of(BYTE_CLASS, LONG_CLASS), narrowingToByte);
+ standardConverterMap.put(Pair.of(BYTE_CLASS, FLOAT_CLASS), narrowingToByte);
+ standardConverterMap.put(Pair.of(BYTE_CLASS, DOUBLE_CLASS), narrowingToByte);
+ standardConverterMap.put(Pair.of(BYTE_CLASS, NUMBER_CLASS), narrowingToByte);
+ standardConverterMap.put(Pair.of(BYTE_CLASS, SHORT_TYPE), narrowingToByte);
+ standardConverterMap.put(Pair.of(BYTE_CLASS, INTEGER_TYPE), narrowingToByte);
+ standardConverterMap.put(Pair.of(BYTE_CLASS, LONG_TYPE), narrowingToByte);
+ standardConverterMap.put(Pair.of(BYTE_CLASS, FLOAT_TYPE), narrowingToByte);
+ standardConverterMap.put(Pair.of(BYTE_CLASS, DOUBLE_TYPE), narrowingToByte);
+ standardConverterMap.put(Pair.of(BYTE_TYPE, SHORT_CLASS), narrowingToByte);
+ standardConverterMap.put(Pair.of(BYTE_TYPE, INTEGER_CLASS), narrowingToByte);
+ standardConverterMap.put(Pair.of(BYTE_TYPE, LONG_CLASS), narrowingToByte);
+ standardConverterMap.put(Pair.of(BYTE_TYPE, FLOAT_CLASS), narrowingToByte);
+ standardConverterMap.put(Pair.of(BYTE_TYPE, DOUBLE_CLASS), narrowingToByte);
+ standardConverterMap.put(Pair.of(BYTE_TYPE, NUMBER_CLASS), narrowingToByte);
+ standardConverterMap.put(Pair.of(BYTE_TYPE, SHORT_TYPE), narrowingToByte);
+ standardConverterMap.put(Pair.of(BYTE_TYPE, INTEGER_TYPE), narrowingToByte);
+ standardConverterMap.put(Pair.of(BYTE_TYPE, LONG_TYPE), narrowingToByte);
+ standardConverterMap.put(Pair.of(BYTE_TYPE, FLOAT_TYPE), narrowingToByte);
+ standardConverterMap.put(Pair.of(BYTE_TYPE, DOUBLE_TYPE), narrowingToByte);
/* string to byte */
Converter<Byte> stringToByte = new Converter<Byte>()
@@ -192,8 +212,8 @@ public class TypeConversionHandlerImpl implements TypeConversionHandler
return Byte.valueOf(String.valueOf(o));
}
};
- standardConverterMap.put(new Pair<>(Byte.class, String.class), stringToByte);
- standardConverterMap.put(new Pair<>(Byte.TYPE, String.class), stringToByte);
+ standardConverterMap.put(Pair.of(BYTE_CLASS, STRING_CLASS), stringToByte);
+ standardConverterMap.put(Pair.of(BYTE_TYPE, STRING_CLASS), stringToByte);
/* narrowing towards short */
Converter<Short> narrowingToShort = new Converter<Short>()
@@ -210,24 +230,24 @@ public class TypeConversionHandlerImpl implements TypeConversionHandler
return ((Number) o).shortValue();
}
};
- standardConverterMap.put(new Pair<>(Short.class, Integer.class), narrowingToShort);
- standardConverterMap.put(new Pair<>(Short.class, Long.class), narrowingToShort);
- standardConverterMap.put(new Pair<>(Short.class, Float.class), narrowingToShort);
- standardConverterMap.put(new Pair<>(Short.class, Double.class), narrowingToShort);
- standardConverterMap.put(new Pair<>(Short.class, Number.class), narrowingToShort);
- standardConverterMap.put(new Pair<>(Short.class, Integer.TYPE), narrowingToShort);
- standardConverterMap.put(new Pair<>(Short.class, Long.TYPE), narrowingToShort);
- standardConverterMap.put(new Pair<>(Short.class, Float.TYPE), narrowingToShort);
- standardConverterMap.put(new Pair<>(Short.class, Double.TYPE), narrowingToShort);
- standardConverterMap.put(new Pair<>(Short.TYPE, Integer.class), narrowingToShort);
- standardConverterMap.put(new Pair<>(Short.TYPE, Long.class), narrowingToShort);
- standardConverterMap.put(new Pair<>(Short.TYPE, Float.class), narrowingToShort);
- standardConverterMap.put(new Pair<>(Short.TYPE, Double.class), narrowingToShort);
- standardConverterMap.put(new Pair<>(Short.TYPE, Number.class), narrowingToShort);
- standardConverterMap.put(new Pair<>(Short.TYPE, Integer.TYPE), narrowingToShort);
- standardConverterMap.put(new Pair<>(Short.TYPE, Long.TYPE), narrowingToShort);
- standardConverterMap.put(new Pair<>(Short.TYPE, Float.TYPE), narrowingToShort);
- standardConverterMap.put(new Pair<>(Short.TYPE, Double.TYPE), narrowingToShort);
+ standardConverterMap.put(Pair.of(SHORT_CLASS, INTEGER_CLASS), narrowingToShort);
+ standardConverterMap.put(Pair.of(SHORT_CLASS, LONG_CLASS), narrowingToShort);
+ standardConverterMap.put(Pair.of(SHORT_CLASS, FLOAT_CLASS), narrowingToShort);
+ standardConverterMap.put(Pair.of(SHORT_CLASS, DOUBLE_CLASS), narrowingToShort);
+ standardConverterMap.put(Pair.of(SHORT_CLASS, NUMBER_CLASS), narrowingToShort);
+ standardConverterMap.put(Pair.of(SHORT_CLASS, INTEGER_TYPE), narrowingToShort);
+ standardConverterMap.put(Pair.of(SHORT_CLASS, LONG_TYPE), narrowingToShort);
+ standardConverterMap.put(Pair.of(SHORT_CLASS, FLOAT_TYPE), narrowingToShort);
+ standardConverterMap.put(Pair.of(SHORT_CLASS, DOUBLE_TYPE), narrowingToShort);
+ standardConverterMap.put(Pair.of(SHORT_TYPE, INTEGER_CLASS), narrowingToShort);
+ standardConverterMap.put(Pair.of(SHORT_TYPE, LONG_CLASS), narrowingToShort);
+ standardConverterMap.put(Pair.of(SHORT_TYPE, FLOAT_CLASS), narrowingToShort);
+ standardConverterMap.put(Pair.of(SHORT_TYPE, DOUBLE_CLASS), narrowingToShort);
+ standardConverterMap.put(Pair.of(SHORT_TYPE, NUMBER_CLASS), narrowingToShort);
+ standardConverterMap.put(Pair.of(SHORT_TYPE, INTEGER_TYPE), narrowingToShort);
+ standardConverterMap.put(Pair.of(SHORT_TYPE, LONG_TYPE), narrowingToShort);
+ standardConverterMap.put(Pair.of(SHORT_TYPE, FLOAT_TYPE), narrowingToShort);
+ standardConverterMap.put(Pair.of(SHORT_TYPE, DOUBLE_TYPE), narrowingToShort);
/* string to short */
Converter<Short> stringToShort = new Converter<Short>()
@@ -238,8 +258,8 @@ public class TypeConversionHandlerImpl implements TypeConversionHandler
return Short.valueOf(String.valueOf(o));
}
};
- standardConverterMap.put(new Pair<>(Short.class, String.class), stringToShort);
- standardConverterMap.put(new Pair<>(Short.TYPE, String.class), stringToShort);
+ standardConverterMap.put(Pair.of(SHORT_CLASS, STRING_CLASS), stringToShort);
+ standardConverterMap.put(Pair.of(SHORT_TYPE, STRING_CLASS), stringToShort);
/* narrowing towards int */
Converter<Integer> narrowingToInteger = new Converter<Integer>()
@@ -256,20 +276,20 @@ public class TypeConversionHandlerImpl implements TypeConversionHandler
return ((Number) o).intValue();
}
};
- standardConverterMap.put(new Pair<>(Integer.class, Long.class), narrowingToInteger);
- standardConverterMap.put(new Pair<>(Integer.class, Float.class), narrowingToInteger);
- standardConverterMap.put(new Pair<>(Integer.class, Double.class), narrowingToInteger);
- standardConverterMap.put(new Pair<>(Integer.class, Number.class), narrowingToInteger);
- standardConverterMap.put(new Pair<>(Integer.class, Long.TYPE), narrowingToInteger);
- standardConverterMap.put(new Pair<>(Integer.class, Float.TYPE), narrowingToInteger);
- standardConverterMap.put(new Pair<>(Integer.class, Double.TYPE), narrowingToInteger);
- standardConverterMap.put(new Pair<>(Integer.TYPE, Long.class), narrowingToInteger);
- standardConverterMap.put(new Pair<>(Integer.TYPE, Float.class), narrowingToInteger);
- standardConverterMap.put(new Pair<>(Integer.TYPE, Double.class), narrowingToInteger);
- standardConverterMap.put(new Pair<>(Integer.TYPE, Number.class), narrowingToInteger);
- standardConverterMap.put(new Pair<>(Integer.TYPE, Long.TYPE), narrowingToInteger);
- standardConverterMap.put(new Pair<>(Integer.TYPE, Float.TYPE), narrowingToInteger);
- standardConverterMap.put(new Pair<>(Integer.TYPE, Double.TYPE), narrowingToInteger);
+ standardConverterMap.put(Pair.of(INTEGER_CLASS, LONG_CLASS), narrowingToInteger);
+ standardConverterMap.put(Pair.of(INTEGER_CLASS, FLOAT_CLASS), narrowingToInteger);
+ standardConverterMap.put(Pair.of(INTEGER_CLASS, DOUBLE_CLASS), narrowingToInteger);
+ standardConverterMap.put(Pair.of(INTEGER_CLASS, NUMBER_CLASS), narrowingToInteger);
+ standardConverterMap.put(Pair.of(INTEGER_CLASS, LONG_TYPE), narrowingToInteger);
+ standardConverterMap.put(Pair.of(INTEGER_CLASS, FLOAT_TYPE), narrowingToInteger);
+ standardConverterMap.put(Pair.of(INTEGER_CLASS, DOUBLE_TYPE), narrowingToInteger);
+ standardConverterMap.put(Pair.of(INTEGER_TYPE, LONG_CLASS), narrowingToInteger);
+ standardConverterMap.put(Pair.of(INTEGER_TYPE, FLOAT_CLASS), narrowingToInteger);
+ standardConverterMap.put(Pair.of(INTEGER_TYPE, DOUBLE_CLASS), narrowingToInteger);
+ standardConverterMap.put(Pair.of(INTEGER_TYPE, NUMBER_CLASS), narrowingToInteger);
+ standardConverterMap.put(Pair.of(INTEGER_TYPE, LONG_TYPE), narrowingToInteger);
+ standardConverterMap.put(Pair.of(INTEGER_TYPE, FLOAT_TYPE), narrowingToInteger);
+ standardConverterMap.put(Pair.of(INTEGER_TYPE, DOUBLE_TYPE), narrowingToInteger);
/* widening towards Integer */
Converter<Integer> wideningToInteger = new Converter<Integer>()
@@ -281,8 +301,8 @@ public class TypeConversionHandlerImpl implements TypeConversionHandler
return ((Number) o).intValue();
}
};
- standardConverterMap.put(new Pair<>(Integer.class, Short.class), wideningToInteger);
- standardConverterMap.put(new Pair<>(Integer.class, Short.TYPE), wideningToInteger);
+ standardConverterMap.put(Pair.of(INTEGER_CLASS, SHORT_CLASS), wideningToInteger);
+ standardConverterMap.put(Pair.of(INTEGER_CLASS, SHORT_TYPE), wideningToInteger);
/* string to int */
Converter<Integer> stringToInteger = new Converter<Integer>()
@@ -293,8 +313,8 @@ public class TypeConversionHandlerImpl implements TypeConversionHandler
return Integer.valueOf(String.valueOf(o));
}
};
- standardConverterMap.put(new Pair<>(Integer.class, String.class), stringToInteger);
- standardConverterMap.put(new Pair<>(Integer.TYPE, String.class), stringToInteger);
+ standardConverterMap.put(Pair.of(INTEGER_CLASS, STRING_CLASS), stringToInteger);
+ standardConverterMap.put(Pair.of(INTEGER_TYPE, STRING_CLASS), stringToInteger);
/* narrowing towards long */
Converter<Long> narrowingToLong = new Converter<Long>()
@@ -311,16 +331,16 @@ public class TypeConversionHandlerImpl implements TypeConversionHandler
return ((Number) o).longValue();
}
};
- standardConverterMap.put(new Pair<>(Long.class, Float.class), narrowingToLong);
- standardConverterMap.put(new Pair<>(Long.class, Double.class), narrowingToLong);
- standardConverterMap.put(new Pair<>(Long.class, Number.class), narrowingToLong);
- standardConverterMap.put(new Pair<>(Long.class, Float.TYPE), narrowingToLong);
- standardConverterMap.put(new Pair<>(Long.class, Double.TYPE), narrowingToLong);
- standardConverterMap.put(new Pair<>(Long.TYPE, Float.class), narrowingToLong);
- standardConverterMap.put(new Pair<>(Long.TYPE, Double.class), narrowingToLong);
- standardConverterMap.put(new Pair<>(Long.TYPE, Number.class), narrowingToLong);
- standardConverterMap.put(new Pair<>(Long.TYPE, Float.TYPE), narrowingToLong);
- standardConverterMap.put(new Pair<>(Long.TYPE, Double.TYPE), narrowingToLong);
+ standardConverterMap.put(Pair.of(LONG_CLASS, FLOAT_CLASS), narrowingToLong);
+ standardConverterMap.put(Pair.of(LONG_CLASS, DOUBLE_CLASS), narrowingToLong);
+ standardConverterMap.put(Pair.of(LONG_CLASS, NUMBER_CLASS), narrowingToLong);
+ standardConverterMap.put(Pair.of(LONG_CLASS, FLOAT_TYPE), narrowingToLong);
+ standardConverterMap.put(Pair.of(LONG_CLASS, DOUBLE_TYPE), narrowingToLong);
+ standardConverterMap.put(Pair.of(LONG_TYPE, FLOAT_CLASS), narrowingToLong);
+ standardConverterMap.put(Pair.of(LONG_TYPE, DOUBLE_CLASS), narrowingToLong);
+ standardConverterMap.put(Pair.of(LONG_TYPE, NUMBER_CLASS), narrowingToLong);
+ standardConverterMap.put(Pair.of(LONG_TYPE, FLOAT_TYPE), narrowingToLong);
+ standardConverterMap.put(Pair.of(LONG_TYPE, DOUBLE_TYPE), narrowingToLong);
/* widening towards Long */
Converter<Long> wideningToLong = new Converter<Long>()
@@ -332,10 +352,10 @@ public class TypeConversionHandlerImpl implements TypeConversionHandler
return ((Number) o).longValue();
}
};
- standardConverterMap.put(new Pair<>(Long.class, Short.class), wideningToLong);
- standardConverterMap.put(new Pair<>(Long.class, Integer.class), wideningToLong);
- standardConverterMap.put(new Pair<>(Long.class, Short.TYPE), wideningToLong);
- standardConverterMap.put(new Pair<>(Long.class, Integer.TYPE), wideningToLong);
+ standardConverterMap.put(Pair.of(LONG_CLASS, SHORT_CLASS), wideningToLong);
+ standardConverterMap.put(Pair.of(LONG_CLASS, INTEGER_CLASS), wideningToLong);
+ standardConverterMap.put(Pair.of(LONG_CLASS, SHORT_TYPE), wideningToLong);
+ standardConverterMap.put(Pair.of(LONG_CLASS, INTEGER_TYPE), wideningToLong);
/* string to long */
Converter<Long> stringToLong = new Converter<Long>()
@@ -346,8 +366,8 @@ public class TypeConversionHandlerImpl implements TypeConversionHandler
return Long.valueOf(String.valueOf(o));
}
};
- standardConverterMap.put(new Pair<>(Long.class, String.class), stringToLong);
- standardConverterMap.put(new Pair<>(Long.TYPE, String.class), stringToLong);
+ standardConverterMap.put(Pair.of(LONG_CLASS, STRING_CLASS), stringToLong);
+ standardConverterMap.put(Pair.of(LONG_TYPE, STRING_CLASS), stringToLong);
/* narrowing towards float */
Converter<Float> narrowingToFloat = new Converter<Float>()
@@ -358,12 +378,12 @@ public class TypeConversionHandlerImpl implements TypeConversionHandler
return o == null ? null : ((Number) o).floatValue();
}
};
- standardConverterMap.put(new Pair<>(Float.class, Double.class), narrowingToFloat);
- standardConverterMap.put(new Pair<>(Float.class, Number.class), narrowingToFloat);
- standardConverterMap.put(new Pair<>(Float.class, Double.TYPE), narrowingToFloat);
- standardConverterMap.put(new Pair<>(Float.TYPE, Double.class), narrowingToFloat);
- standardConverterMap.put(new Pair<>(Float.TYPE, Number.class), narrowingToFloat);
- standardConverterMap.put(new Pair<>(Float.TYPE, Double.TYPE), narrowingToFloat);
+ standardConverterMap.put(Pair.of(FLOAT_CLASS, DOUBLE_CLASS), narrowingToFloat);
+ standardConverterMap.put(Pair.of(FLOAT_CLASS, NUMBER_CLASS), narrowingToFloat);
+ standardConverterMap.put(Pair.of(FLOAT_CLASS, DOUBLE_TYPE), narrowingToFloat);
+ standardConverterMap.put(Pair.of(FLOAT_TYPE, DOUBLE_CLASS), narrowingToFloat);
+ standardConverterMap.put(Pair.of(FLOAT_TYPE, NUMBER_CLASS), narrowingToFloat);
+ standardConverterMap.put(Pair.of(FLOAT_TYPE, DOUBLE_TYPE), narrowingToFloat);
/* exact towards Float */
Converter<Float> toFloat = new Converter<Float>()
@@ -375,12 +395,12 @@ public class TypeConversionHandlerImpl implements TypeConversionHandler
return ((Number) o).floatValue();
}
};
- standardConverterMap.put(new Pair<>(Float.class, Short.class), toFloat);
- standardConverterMap.put(new Pair<>(Float.class, Integer.class), toFloat);
- standardConverterMap.put(new Pair<>(Float.class, Long.class), toFloat);
- standardConverterMap.put(new Pair<>(Float.class, Short.TYPE), toFloat);
- standardConverterMap.put(new Pair<>(Float.class, Integer.TYPE), toFloat);
- standardConverterMap.put(new Pair<>(Float.class, Long.TYPE), toFloat);
+ standardConverterMap.put(Pair.of(FLOAT_CLASS, SHORT_CLASS), toFloat);
+ standardConverterMap.put(Pair.of(FLOAT_CLASS, INTEGER_CLASS), toFloat);
+ standardConverterMap.put(Pair.of(FLOAT_CLASS, LONG_CLASS), toFloat);
+ standardConverterMap.put(Pair.of(FLOAT_CLASS, SHORT_TYPE), toFloat);
+ standardConverterMap.put(Pair.of(FLOAT_CLASS, INTEGER_TYPE), toFloat);
+ standardConverterMap.put(Pair.of(FLOAT_CLASS, LONG_TYPE), toFloat);
/* string to float */
Converter<Float> stringToFloat = new Converter<Float>()
@@ -391,8 +411,8 @@ public class TypeConversionHandlerImpl implements TypeConversionHandler
return Float.valueOf(String.valueOf(o));
}
};
- standardConverterMap.put(new Pair<>(Float.class, String.class), stringToFloat);
- standardConverterMap.put(new Pair<>(Float.TYPE, String.class), stringToFloat);
+ standardConverterMap.put(Pair.of(FLOAT_CLASS, STRING_CLASS), stringToFloat);
+ standardConverterMap.put(Pair.of(FLOAT_TYPE, STRING_CLASS), stringToFloat);
/* exact or widening towards Double */
Converter<Double> toDouble = new Converter<Double>()
@@ -404,16 +424,16 @@ public class TypeConversionHandlerImpl implements TypeConversionHandler
return ((Number) o).doubleValue();
}
};
- standardConverterMap.put(new Pair<>(Double.class, Short.class), toDouble);
- standardConverterMap.put(new Pair<>(Double.class, Integer.class), toDouble);
- standardConverterMap.put(new Pair<>(Double.class, Long.class), toDouble);
- standardConverterMap.put(new Pair<>(Double.class, Float.class), toDouble);
- standardConverterMap.put(new Pair<>(Double.class, Number.class), toDouble);
- standardConverterMap.put(new Pair<>(Double.class, Short.TYPE), toDouble);
- standardConverterMap.put(new Pair<>(Double.class, Integer.TYPE), toDouble);
- standardConverterMap.put(new Pair<>(Double.class, Long.TYPE), toDouble);
- standardConverterMap.put(new Pair<>(Double.class, Float.TYPE), toDouble);
- standardConverterMap.put(new Pair<>(Double.TYPE, Number.class), toDouble);
+ standardConverterMap.put(Pair.of(DOUBLE_CLASS, SHORT_CLASS), toDouble);
+ standardConverterMap.put(Pair.of(DOUBLE_CLASS, INTEGER_CLASS), toDouble);
+ standardConverterMap.put(Pair.of(DOUBLE_CLASS, LONG_CLASS), toDouble);
+ standardConverterMap.put(Pair.of(DOUBLE_CLASS, FLOAT_CLASS), toDouble);
+ standardConverterMap.put(Pair.of(DOUBLE_CLASS, NUMBER_CLASS), toDouble);
+ standardConverterMap.put(Pair.of(DOUBLE_CLASS, SHORT_TYPE), toDouble);
+ standardConverterMap.put(Pair.of(DOUBLE_CLASS, INTEGER_TYPE), toDouble);
+ standardConverterMap.put(Pair.of(DOUBLE_CLASS, LONG_TYPE), toDouble);
+ standardConverterMap.put(Pair.of(DOUBLE_CLASS, FLOAT_TYPE), toDouble);
+ standardConverterMap.put(Pair.of(DOUBLE_TYPE, NUMBER_CLASS), toDouble);
/* string to double */
Converter<Double> stringToDouble = new Converter<Double>()
@@ -424,8 +444,8 @@ public class TypeConversionHandlerImpl implements TypeConversionHandler
return Double.valueOf(String.valueOf(o));
}
};
- standardConverterMap.put(new Pair<>(Double.class, String.class), stringToDouble);
- standardConverterMap.put(new Pair<>(Double.TYPE, String.class), stringToDouble);
+ standardConverterMap.put(Pair.of(DOUBLE_CLASS, STRING_CLASS), stringToDouble);
+ standardConverterMap.put(Pair.of(DOUBLE_TYPE, STRING_CLASS), stringToDouble);
/* boolean to byte */
Converter<Byte> booleanToByte = new Converter<Byte>()
@@ -436,10 +456,10 @@ public class TypeConversionHandlerImpl implements TypeConversionHandler
return o == null ? null : (Boolean) o ? (byte)1 : (byte)0;
}
};
- standardConverterMap.put(new Pair<>(Byte.class, Boolean.class), booleanToByte);
- standardConverterMap.put(new Pair<>(Byte.class, Boolean.TYPE), booleanToByte);
- standardConverterMap.put(new Pair<>(Byte.TYPE, Boolean.class), booleanToByte);
- standardConverterMap.put(new Pair<>(Byte.TYPE, Boolean.TYPE), booleanToByte);
+ standardConverterMap.put(Pair.of(BYTE_CLASS, BOOLEAN_CLASS), booleanToByte);
+ standardConverterMap.put(Pair.of(BYTE_CLASS, BOOLEAN_TYPE), booleanToByte);
+ standardConverterMap.put(Pair.of(BYTE_TYPE, BOOLEAN_CLASS), booleanToByte);
+ standardConverterMap.put(Pair.of(BYTE_TYPE, BOOLEAN_TYPE), booleanToByte);
/* boolean to short */
Converter<Short> booleanToShort = new Converter<Short>()
@@ -450,10 +470,10 @@ public class TypeConversionHandlerImpl implements TypeConversionHandler
return o == null ? null : (Boolean) o ? (short)1 : (short)0;
}
};
- standardConverterMap.put(new Pair<>(Short.class, Boolean.class), booleanToShort);
- standardConverterMap.put(new Pair<>(Short.class, Boolean.TYPE), booleanToShort);
- standardConverterMap.put(new Pair<>(Short.TYPE, Boolean.class), booleanToShort);
- standardConverterMap.put(new Pair<>(Short.TYPE, Boolean.TYPE), booleanToShort);
+ standardConverterMap.put(Pair.of(SHORT_CLASS, BOOLEAN_CLASS), booleanToShort);
+ standardConverterMap.put(Pair.of(SHORT_CLASS, BOOLEAN_TYPE), booleanToShort);
+ standardConverterMap.put(Pair.of(SHORT_TYPE, BOOLEAN_CLASS), booleanToShort);
+ standardConverterMap.put(Pair.of(SHORT_TYPE, BOOLEAN_TYPE), booleanToShort);
/* boolean to integer */
Converter<Integer> booleanToInteger = new Converter<Integer>()
@@ -464,10 +484,10 @@ public class TypeConversionHandlerImpl implements TypeConversionHandler
return o == null ? null : (Boolean) o ? (Integer)1 : (Integer)0;
}
};
- standardConverterMap.put(new Pair<>(Integer.class, Boolean.class), booleanToInteger);
- standardConverterMap.put(new Pair<>(Integer.class, Boolean.TYPE), booleanToInteger);
- standardConverterMap.put(new Pair<>(Integer.TYPE, Boolean.class), booleanToInteger);
- standardConverterMap.put(new Pair<>(Integer.TYPE, Boolean.TYPE), booleanToInteger);
+ standardConverterMap.put(Pair.of(INTEGER_CLASS, BOOLEAN_CLASS), booleanToInteger);
+ standardConverterMap.put(Pair.of(INTEGER_CLASS, BOOLEAN_TYPE), booleanToInteger);
+ standardConverterMap.put(Pair.of(INTEGER_TYPE, BOOLEAN_CLASS), booleanToInteger);
+ standardConverterMap.put(Pair.of(INTEGER_TYPE, BOOLEAN_TYPE), booleanToInteger);
/* boolean to lonf */
Converter<Long> booleanToLong = new Converter<Long>()
@@ -478,10 +498,10 @@ public class TypeConversionHandlerImpl implements TypeConversionHandler
return o == null ? null : (Boolean) o ? 1L : 0L;
}
};
- standardConverterMap.put(new Pair<>(Long.class, Boolean.class), booleanToLong);
- standardConverterMap.put(new Pair<>(Long.class, Boolean.TYPE), booleanToLong);
- standardConverterMap.put(new Pair<>(Long.TYPE, Boolean.class), booleanToLong);
- standardConverterMap.put(new Pair<>(Long.TYPE, Boolean.TYPE), booleanToLong);
+ standardConverterMap.put(Pair.of(LONG_CLASS, BOOLEAN_CLASS), booleanToLong);
+ standardConverterMap.put(Pair.of(LONG_CLASS, BOOLEAN_TYPE), booleanToLong);
+ standardConverterMap.put(Pair.of(LONG_TYPE, BOOLEAN_CLASS), booleanToLong);
+ standardConverterMap.put(Pair.of(LONG_TYPE, BOOLEAN_TYPE), booleanToLong);
/* to string */
toString = new Converter<String>()
@@ -524,13 +544,13 @@ public class TypeConversionHandlerImpl implements TypeConversionHandler
}
/* Check var arg */
- if (possibleVarArg && (formal instanceof Class) && ((Class)formal).isArray())
+ if (possibleVarArg && TypeUtils.isArrayType(formal))
{
if (actual.isArray())
{
actual = actual.getComponentType();
}
- return isExplicitlyConvertible(((Class)formal).getComponentType(), actual, false);
+ return isExplicitlyConvertible(TypeUtils.getArrayComponentType(formal), actual, false);
}
return false;
}
@@ -548,7 +568,11 @@ public class TypeConversionHandlerImpl implements TypeConversionHandler
@Override
public Converter getNeededConverter(Type formal, Class actual)
{
- Pair<Type, Class> key = new Pair<>(formal, actual);
+ if (actual == null)
+ {
+ return null;
+ }
+ Pair<String, String> key = Pair.of(formal.getTypeName(), actual.getTypeName());
/* first check for a standard conversion */
Converter converter = standardConverterMap.get(key);
@@ -594,14 +618,14 @@ public class TypeConversionHandlerImpl implements TypeConversionHandler
@Override
public void addConverter(Type formal, Class actual, Converter converter)
{
- Pair<Type, Class> key = new Pair<>(formal, actual);
+ Pair<String, String> key = Pair.of(formal.getTypeName(), actual.getTypeName());
converterCacheMap.put(key, converter);
if (formal instanceof Class)
{
Class formalClass = (Class)formal;
if (formalClass.isPrimitive())
{
- key = new Pair<>((Type)IntrospectionUtils.getBoxedClass(formalClass), actual);
+ key = Pair.of(IntrospectionUtils.getBoxedClass(formalClass).getTypeName(), actual.getTypeName());
converterCacheMap.put(key, converter);
}
else
@@ -609,7 +633,7 @@ public class TypeConversionHandlerImpl implements TypeConversionHandler
Class unboxedFormal = IntrospectionUtils.getUnboxedClass(formalClass);
if (unboxedFormal != formalClass)
{
- key = new Pair<>((Type)unboxedFormal, actual);
+ key = Pair.of(unboxedFormal.getTypeName(), actual.getTypeName());
converterCacheMap.put(key, converter);
}
}