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 2018/10/04 17:40:35 UTC
svn commit: r1842835 - in /velocity/engine/trunk/velocity-engine-core/src:
main/java/org/apache/velocity/runtime/parser/node/ASTIntegerRange.java
test/resources/templates/compare/range.cmp test/resources/templates/range.vm
Author: cbrisson
Date: Thu Oct 4 17:40:34 2018
New Revision: 1842835
URL: http://svn.apache.org/viewvc?rev=1842835&view=rev
Log:
[VELOCITY-895] Implicit conversion to numbers in integer range, plus testcase
Modified:
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTIntegerRange.java
velocity/engine/trunk/velocity-engine-core/src/test/resources/templates/compare/range.cmp
velocity/engine/trunk/velocity-engine-core/src/test/resources/templates/range.vm
Modified: velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTIntegerRange.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTIntegerRange.java?rev=1842835&r1=1842834&r2=1842835&view=diff
==============================================================================
--- velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTIntegerRange.java (original)
+++ velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTIntegerRange.java Thu Oct 4 17:40:34 2018
@@ -23,6 +23,7 @@ import org.apache.velocity.context.Inter
import org.apache.velocity.exception.MethodInvocationException;
import org.apache.velocity.exception.TemplateInitException;
import org.apache.velocity.runtime.parser.Parser;
+import org.apache.velocity.util.DuckType;
import org.apache.velocity.util.StringUtils;
import java.util.ArrayList;
@@ -95,14 +96,29 @@ public class ASTIntegerRange extends Sim
}
/*
- * if not a Number, not much we can do either
+ * if not a Number, try to convert
+ */
+
+ try
+ {
+ left = DuckType.asNumber(left);
+ }
+ catch (NumberFormatException nfe) {}
+
+ try
+ {
+ right = DuckType.asNumber(right);
+ }
+ catch (NumberFormatException nfe) {}
+
+ /*
+ * if still not a Number, nothing we can do
*/
if ( !( left instanceof Number ) || !( right instanceof Number ))
{
log.error((!(left instanceof Number) ? "Left" : "Right")
- + " side of range operator is not a valid type. "
- + "Currently only integers (1,2,3...) and the Number type are supported. "
+ + " side of range operator is not convertible to a Number. "
+ StringUtils.formatFileString(this));
return null;
}
Modified: velocity/engine/trunk/velocity-engine-core/src/test/resources/templates/compare/range.cmp
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/test/resources/templates/compare/range.cmp?rev=1842835&r1=1842834&r2=1842835&view=diff
==============================================================================
--- velocity/engine/trunk/velocity-engine-core/src/test/resources/templates/compare/range.cmp (original)
+++ velocity/engine/trunk/velocity-engine-core/src/test/resources/templates/compare/range.cmp Thu Oct 4 17:40:34 2018
@@ -23,6 +23,9 @@
refs $a=1 $b=5 [$a..$b]
1 2 3 4 5
-----
+refs $a=1 $b="5" [$a.."$b"]
+ 1 2 3 4 5
+-----
[$a.. 7]
1 2 3 4 5 6 7
-----
Modified: velocity/engine/trunk/velocity-engine-core/src/test/resources/templates/range.vm
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/test/resources/templates/range.vm?rev=1842835&r1=1842834&r2=1842835&view=diff
==============================================================================
--- velocity/engine/trunk/velocity-engine-core/src/test/resources/templates/range.vm (original)
+++ velocity/engine/trunk/velocity-engine-core/src/test/resources/templates/range.vm Thu Oct 4 17:40:34 2018
@@ -44,6 +44,12 @@ refs \$a=$a \$b=$b [\$a..\$b]
#foreach($i in [$a..$b]) $i #end
-----
+#set($a = 1)
+#set($b = "5")
+refs \$a=$a \$b="$b" [\$a.."\$b"]
+#foreach($i in [$a..$b]) $i #end
+
+-----
[\$a.. 7]
#foreach($i in [$a.. 7]) $i #end