You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@velocity.apache.org by cb...@apache.org on 2017/04/08 13:19:51 UTC

svn commit: r1790678 - /velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/ConversionHandlerImpl.java

Author: cbrisson
Date: Sat Apr  8 13:19:50 2017
New Revision: 1790678

URL: http://svn.apache.org/viewvc?rev=1790678&view=rev
Log:
[engine] Add standard converters from Number towards specific number classes

Modified:
    velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/ConversionHandlerImpl.java

Modified: velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/ConversionHandlerImpl.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/ConversionHandlerImpl.java?rev=1790678&r1=1790677&r2=1790678&view=diff
==============================================================================
--- velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/ConversionHandlerImpl.java (original)
+++ velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/ConversionHandlerImpl.java Sat Apr  8 13:19:50 2017
@@ -97,6 +97,7 @@ public class ConversionHandlerImpl imple
         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 imple
         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 imple
         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 imple
         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 imple
         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 imple
         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 imple
         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 imple
         };
         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 imple
             }
         };
         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 imple
     @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;
         }