Author: cbrisson
Date: Tue Nov 8 13:28:42 2016
New Revision: 1768687
URL: http://svn.apache.org/viewvc?rev=1768687&view=rev
Log:
[engine] fix conversions towards Number, and handle widening boxed conversions
as well
Modified:
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/ConversionHandlerImpl.java
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/IntrospectionUtils.java
velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/util/introspection/ConversionHandlerTestCase.java
velocity/engine/trunk/velocity-engine-core/src/test/resources/conversion/compare/matrix.cmp
velocity/engine/trunk/velocity-engine-core/src/test/resources/conversion/matrix.vhtml
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=1768687&r1=1768686&r2=1768687&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
Tue Nov 8 13:28:42 2016
@@ -97,12 +97,24 @@ 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, 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, 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);
/* character -> boolean */
Converter<Boolean> charToBoolean = new Converter<Boolean>()
@@ -114,7 +126,9 @@ public class ConversionHandlerImpl imple
}
};
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);
/* string -> boolean */
Converter<Boolean> stringToBoolean = new Converter<Boolean>()
@@ -148,11 +162,21 @@ 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, 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, 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);
/* string to byte */
Converter<Byte> stringToByte = new Converter<Byte>()
@@ -185,10 +209,18 @@ 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, 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, 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);
/* string to short */
Converter<Short> stringToShort = new Converter<Short>()
@@ -220,9 +252,28 @@ 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, 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, Long.TYPE),
narrowingToInteger);
+ standardConverterMap.put(new Pair<>(Integer.TYPE, Float.TYPE),
narrowingToInteger);
+ standardConverterMap.put(new Pair<>(Integer.TYPE, Double.TYPE),
narrowingToInteger);
+
+ /* widening towards Integer */
+ Converter<Integer> wideningToInteger = new Converter<Integer>()
+ {
+ @Override
+ public Integer convert(Object o)
+ {
+ if (o == null) return null;
+ return ((Number) o).intValue();
+ }
+ };
+ standardConverterMap.put(new Pair<>(Integer.class, Short.class),
wideningToInteger);
+ standardConverterMap.put(new Pair<>(Integer.class, Short.TYPE),
wideningToInteger);
/* string to int */
Converter<Integer> stringToInteger = new Converter<Integer>()
@@ -253,8 +304,27 @@ 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, 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, Float.TYPE),
narrowingToLong);
+ standardConverterMap.put(new Pair<>(Long.TYPE, Double.TYPE),
narrowingToLong);
+
+ /* widening towards Long */
+ Converter<Long> wideningToLong = new Converter<Long>()
+ {
+ @Override
+ public Long convert(Object o)
+ {
+ if (o == null) return null;
+ 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);
/* string to long */
Converter<Long> stringToLong = new Converter<Long>()
@@ -278,7 +348,26 @@ public class ConversionHandlerImpl imple
}
};
standardConverterMap.put(new Pair<>(Float.class, Double.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, Double.TYPE),
narrowingToFloat);
+
+ /* exact towards Float */
+ Converter<Float> toFloat = new Converter<Float>()
+ {
+ @Override
+ public Float convert(Object o)
+ {
+ if (o == null) return null;
+ 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);
/* string to float */
Converter<Float> stringToFloat = new Converter<Float>()
@@ -292,6 +381,25 @@ public class ConversionHandlerImpl imple
standardConverterMap.put(new Pair<>(Float.class, String.class),
stringToFloat);
standardConverterMap.put(new Pair<>(Float.TYPE, String.class),
stringToFloat);
+ /* exact or widening towards Double */
+ Converter<Double> toDouble = new Converter<Double>()
+ {
+ @Override
+ public Double convert(Object o)
+ {
+ if (o == null) return null;
+ 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, 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);
+
/* string to double */
Converter<Double> stringToDouble = new Converter<Double>()
{
@@ -314,7 +422,9 @@ public class ConversionHandlerImpl imple
}
};
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);
/* boolean to short */
Converter<Short> booleanToShort = new Converter<Short>()
@@ -326,8 +436,10 @@ public class ConversionHandlerImpl imple
}
};
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);
+
/* boolean to integer */
Converter<Integer> booleanToInteger = new Converter<Integer>()
{
@@ -338,8 +450,10 @@ public class ConversionHandlerImpl imple
}
};
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);
+
/* boolean to lonf */
Converter<Long> booleanToLong = new Converter<Long>()
{
@@ -350,7 +464,9 @@ public class ConversionHandlerImpl imple
}
};
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);
/* to string */
toString = new Converter<String>()
@@ -361,15 +477,6 @@ public class ConversionHandlerImpl imple
return String.valueOf(o);
}
};
- standardConverterMap.put(new Pair<>(String.class, Boolean.class),
toString);
- standardConverterMap.put(new Pair<>(String.class, Byte.class),
toString);
- standardConverterMap.put(new Pair<>(String.class, Short.class),
toString);
- standardConverterMap.put(new Pair<>(String.class, Integer.class),
toString);
- standardConverterMap.put(new Pair<>(String.class, Long.class),
toString);
- standardConverterMap.put(new Pair<>(String.class, Float.class),
toString);
- standardConverterMap.put(new Pair<>(String.class, Double.class),
toString);
- standardConverterMap.put(new Pair<>(String.class, Character.class),
toString);
- standardConverterMap.put(new Pair<>(String.class, Object.class),
toString);
}
/**
@@ -390,7 +497,7 @@ public class ConversionHandlerImpl imple
@Override
public boolean isExplicitlyConvertible(Class formal, Class actual, boolean
possibleVarArg)
{
- if (getNeededConverter(formal, actual) != null)
+ if (formal == actual || getNeededConverter(formal, actual) != null)
{
return true;
}
Modified:
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/IntrospectionUtils.java
URL:
http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/IntrospectionUtils.java?rev=1768687&r1=1768686&r2=1768687&view=diff
==============================================================================
---
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/IntrospectionUtils.java
(original)
+++
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/IntrospectionUtils.java
Tue Nov 8 13:28:42 2016
@@ -131,7 +131,7 @@ public class IntrospectionUtils
if (!formal.isPrimitive() && actual.isPrimitive())
{
Class boxed = boxingMap.get(actual);
- if (boxed != null && boxed == formal) return true;
+ if (boxed != null && boxed == formal ||
formal.isAssignableFrom(boxed)) return true;
}
if (formal.isPrimitive())
Modified:
velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/util/introspection/ConversionHandlerTestCase.java
URL:
http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/util/introspection/ConversionHandlerTestCase.java?rev=1768687&r1=1768686&r2=1768687&view=diff
==============================================================================
---
velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/util/introspection/ConversionHandlerTestCase.java
(original)
+++
velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/util/introspection/ConversionHandlerTestCase.java
Tue Nov 8 13:28:42 2016
@@ -255,6 +255,8 @@ public class ConversionHandlerTestCase e
Long.class,
Float.class,
Double.class,
+ Number.class,
+ String.class,
Object.class
};
context.put("types", types);
Modified:
velocity/engine/trunk/velocity-engine-core/src/test/resources/conversion/compare/matrix.cmp
URL:
http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/test/resources/conversion/compare/matrix.cmp?rev=1768687&r1=1768686&r2=1768687&view=diff
==============================================================================
---
velocity/engine/trunk/velocity-engine-core/src/test/resources/conversion/compare/matrix.cmp
(original)
+++
velocity/engine/trunk/velocity-engine-core/src/test/resources/conversion/compare/matrix.cmp
Tue Nov 8 13:28:42 2016
@@ -1,3 +1,6 @@
+
+
+
<html>
<head>
<style type="text/css">
@@ -10,6 +13,22 @@
{
border: solid 1px black;
}
+ .strict
+ {
+ color: green;
+ }
+ .implicit
+ {
+ color: blue;
+ }
+ .explicit
+ {
+ color: magenta;
+ }
+ .none
+ {
+ color: red;
+ }
</style>
</head>
@@ -18,1577 +37,504 @@
<thead>
<tr>
<th>
- strict<br/>
- implicit<br/>
- explicit
+ provided →<br/>
+ expected ↓
</th>
- <th>boolean</th>
- <th>char</th>
- <th>byte</th>
- <th>short</th>
- <th>int</th>
- <th>long</th>
- <th>float</th>
- <th>double</th>
- <th>class java.lang.Boolean</th>
- <th>class java.lang.Character</th>
- <th>class java.lang.Byte</th>
- <th>class java.lang.Short</th>
- <th>class java.lang.Integer</th>
- <th>class java.lang.Long</th>
- <th>class java.lang.Float</th>
- <th>class java.lang.Double</th>
- <th>class java.lang.Object</th>
+ <th> boolean
+</th>
+ <th> char
+</th>
+ <th> byte
+</th>
+ <th> short
+</th>
+ <th> int
+</th>
+ <th> long
+</th>
+ <th> float
+</th>
+ <th> double
+</th>
+ <th> Boolean
+</th>
+ <th> Character
+</th>
+ <th> Byte
+</th>
+ <th> Short
+</th>
+ <th> Integer
+</th>
+ <th> Long
+</th>
+ <th> Float
+</th>
+ <th> Double
+</th>
+ <th> Number
+</th>
+ <th> String
+</th>
+ <th> Object
+</th>
<th>null</th>
</tr>
<tr>
- <th>formal: boolean</th>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td> </td>
- </tr>
- <tr>
- <th>formal: char</th>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td> </td>
- </tr>
- <tr>
- <th>formal: byte</th>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td> </td>
- </tr>
- <tr>
- <th>formal: short</th>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td> </td>
- </tr>
- <tr>
- <th>formal: int</th>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td> </td>
- </tr>
- <tr>
- <th>formal: long</th>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td> </td>
- </tr>
- <tr>
- <th>formal: float</th>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td> </td>
- </tr>
- <tr>
- <th>formal: double</th>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td> </td>
- </tr>
- <tr>
- <th>formal: class java.lang.Boolean</th>
- <td>
- false<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- </tr>
- <tr>
- <th>formal: class java.lang.Character</th>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- </tr>
- <tr>
- <th>formal: class java.lang.Byte</th>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- </tr>
- <tr>
- <th>formal: class java.lang.Short</th>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- </tr>
- <tr>
- <th>formal: class java.lang.Integer</th>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- </tr>
- <tr>
- <th>formal: class java.lang.Long</th>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- </tr>
- <tr>
- <th>formal: class java.lang.Float</th>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- true
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- </tr>
- <tr>
- <th>formal: class java.lang.Double</th>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- </tr>
- <tr>
- <th>formal: class java.lang.Object</th>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- false<br/>
- false<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
- <td>
- true<br/>
- true<br/>
- false
- </td>
+ <th> boolean
+</th>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td><span class="none">none</span></td>
+ </tr>
+ <tr>
+ <th> char
+</th>
+ <td> <span class="none">none</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td><span class="none">none</span></td>
+ </tr>
+ <tr>
+ <th> byte
+</th>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td><span class="none">none</span></td>
+ </tr>
+ <tr>
+ <th> short
+</th>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td><span class="none">none</span></td>
+ </tr>
+ <tr>
+ <th> int
+</th>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td><span class="none">none</span></td>
+ </tr>
+ <tr>
+ <th> long
+</th>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td><span class="none">none</span></td>
+ </tr>
+ <tr>
+ <th> float
+</th>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td><span class="none">none</span></td>
+ </tr>
+ <tr>
+ <th> double
+</th>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td><span class="none">none</span></td>
+ </tr>
+ <tr>
+ <th> Boolean
+</th>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="strict">strict</span></td>
+ </tr>
+ <tr>
+ <th> Character
+</th>
+ <td> <span class="none">none</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="strict">strict</span></td>
+ </tr>
+ <tr>
+ <th> Byte
+</th>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="strict">strict</span></td>
+ </tr>
+ <tr>
+ <th> Short
+</th>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="strict">strict</span></td>
+ </tr>
+ <tr>
+ <th> Integer
+</th>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="strict">strict</span></td>
+ </tr>
+ <tr>
+ <th> Long
+</th>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="strict">strict</span></td>
+ </tr>
+ <tr>
+ <th> Float
+</th>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="strict">strict</span></td>
+ </tr>
+ <tr>
+ <th> Double
+</th>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="strict">strict</span></td>
+ </tr>
+ <tr>
+ <th> Number
+</th>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="none">none</span></td>
+ <td> <span class="strict">strict</span></td>
+ </tr>
+ <tr>
+ <th> String
+</th>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="explicit">explicit</span></td>
+ <td> <span class="strict">strict</span></td>
+ </tr>
+ <tr>
+ <th> Object
+</th>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="implicit">implicit</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="strict">strict</span></td>
+ <td> <span class="strict">strict</span></td>
</tr>
</thead>
<tbody>
Modified:
velocity/engine/trunk/velocity-engine-core/src/test/resources/conversion/matrix.vhtml
URL:
http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/test/resources/conversion/matrix.vhtml?rev=1768687&r1=1768686&r2=1768687&view=diff
==============================================================================
---
velocity/engine/trunk/velocity-engine-core/src/test/resources/conversion/matrix.vhtml
(original)
+++
velocity/engine/trunk/velocity-engine-core/src/test/resources/conversion/matrix.vhtml
Tue Nov 8 13:28:42 2016
@@ -1,3 +1,21 @@
+#macro(print,$type)
+ #set($string = "$type")
+ #if($string.startsWith("class java.lang."))
+ #set($string = $string.substring(16))
+ #end
+ $string
+#end
+
+#macro(cell,$type)<span class="$type">$type</span>#end
+
+#macro(check,$row,$col)
+ #if($introspect.isStrictlyConvertible($row, $col)) #cell('strict')
+ #elseif($introspect.isImplicitlyConvertible($row, $col)) #cell('implicit')
+ #elseif($introspect.isExplicitlyConvertible($row, $col)) #cell('explicit')
+ #else #cell('none')
+ #end
+#end
+
<html>
<head>
<style type="text/css">
@@ -10,6 +28,22 @@
{
border: solid 1px black;
}
+ .strict
+ {
+ color: green;
+ }
+ .implicit
+ {
+ color: blue;
+ }
+ .explicit
+ {
+ color: magenta;
+ }
+ .none
+ {
+ color: red;
+ }
</style>
</head>
@@ -18,33 +52,24 @@
<thead>
<tr>
<th>
- strict<br/>
- implicit<br/>
- explicit
+ provided →<br/>
+ expected ↓
</th>
-#foreach($col in $types)
- <th>$col</th>
+#foreach($col in $types)
+ <th>#print($col)</th>
#end
<th>null</th>
</tr>
#foreach($row in $types)
<tr>
- <th>formal: $row</th>
+ <th>#print($row)</th>
#foreach($col in $types)
- <td>
- $introspect.isStrictlyConvertible($row, $col)<br/>
- $introspect.isImplicitlyConvertible($row, $col)<br/>
- $introspect.isExplicitlyConvertible($row, $col)
- </td>
+ <td>#check($row,$col)</td>
#end
#if($row.isPrimitive())
- <td> </td>
+ <td>#cell('none')</td>
#else
- <td>
- $introspect.isStrictlyConvertible($row, $null)<br/>
- $introspect.isImplicitlyConvertible($row, $null)<br/>
- $introspect.isExplicitlyConvertible($row, $null)
- </td>
+ <td>#check($row, $null)</td>
#end
</tr>
#end