aboutsummaryrefslogtreecommitdiff
path: root/velocity-engine-core/src/main/java
diff options
context:
space:
mode:
authorClaude Brisson <cbrisson@apache.org>2017-04-08 13:19:50 +0000
committerClaude Brisson <cbrisson@apache.org>2017-04-08 13:19:50 +0000
commit65b4358ef2d169c494dc2d387c26814784d3685a (patch)
treec450d6d991b3088b4162d374ee5723a583ce29db /velocity-engine-core/src/main/java
parent579f47f75e5a0c2d91cad9119842ce57e1addad6 (diff)
downloadapache-velocity-engine-65b4358ef2d169c494dc2d387c26814784d3685a.tar.gz
[engine] Add standard converters from Number towards specific number classes
git-svn-id: https://svn.apache.org/repos/asf/velocity/engine/trunk@1790678 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/ConversionHandlerImpl.java20
1 files changed, 19 insertions, 1 deletions
diff --git a/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/ConversionHandlerImpl.java b/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/ConversionHandlerImpl.java
index 248c879f..70fc4c66 100644
--- a/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/ConversionHandlerImpl.java
+++ b/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/ConversionHandlerImpl.java
@@ -97,6 +97,7 @@ public class ConversionHandlerImpl implements ConversionHandler
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);
@@ -109,6 +110,7 @@ public class ConversionHandlerImpl implements ConversionHandler
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);
@@ -162,6 +164,7 @@ public class ConversionHandlerImpl implements ConversionHandler
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);
@@ -172,6 +175,7 @@ public class ConversionHandlerImpl implements ConversionHandler
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);
@@ -209,6 +213,7 @@ public class ConversionHandlerImpl implements ConversionHandler
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);
@@ -217,6 +222,7 @@ public class ConversionHandlerImpl implements ConversionHandler
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);
@@ -252,12 +258,14 @@ public class ConversionHandlerImpl implements ConversionHandler
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);
@@ -304,10 +312,12 @@ public class ConversionHandlerImpl implements ConversionHandler
};
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);
@@ -348,8 +358,10 @@ public class ConversionHandlerImpl implements ConversionHandler
}
};
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);
/* exact towards Float */
@@ -497,7 +509,13 @@ public class ConversionHandlerImpl implements ConversionHandler
@Override
public boolean isExplicitlyConvertible(Class formal, Class actual, boolean possibleVarArg)
{
- if (formal == actual || getNeededConverter(formal, actual) != null)
+ /*
+ * for consistency, we also have to check standard implicit convertibility
+ * since it may not have been checked before by the calling code
+ */
+ if (formal == actual ||
+ IntrospectionUtils.isMethodInvocationConvertible(formal, actual, possibleVarArg) ||
+ getNeededConverter(formal, actual) != null)
{
return true;
}