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/02/20 11:51:15 UTC
svn commit: r1783746 - in /velocity/engine/trunk/velocity-engine-core/src:
main/java/org/apache/velocity/runtime/parser/node/
test/java/org/apache/velocity/test/
Author: cbrisson
Date: Mon Feb 20 11:51:14 2017
New Revision: 1783746
URL: http://svn.apache.org/viewvc?rev=1783746&view=rev
Log:
[engine] testcase and literals behavior for emptycheck=false; reference should cache emptycheck for speed
Added:
velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/IfEmptyNoEmptyCheckTestCase.java
- copied, changed from r1783739, velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/IfEmptyTestCase.java
Modified:
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTFloatingPointLiteral.java
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTIntegerLiteral.java
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTMap.java
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTObjectArray.java
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTReference.java
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTStringLiteral.java
Modified: velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTFloatingPointLiteral.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTFloatingPointLiteral.java?rev=1783746&r1=1783745&r2=1783746&view=diff
==============================================================================
--- velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTFloatingPointLiteral.java (original)
+++ velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTFloatingPointLiteral.java Mon Feb 20 11:51:14 2017
@@ -21,6 +21,7 @@ package org.apache.velocity.runtime.pars
import org.apache.velocity.context.InternalContextAdapter;
import org.apache.velocity.exception.TemplateInitException;
+import org.apache.velocity.runtime.RuntimeConstants;
import org.apache.velocity.runtime.parser.Parser;
import java.math.BigDecimal;
@@ -115,7 +116,7 @@ public class ASTFloatingPointLiteral ext
*/
public boolean evaluate( InternalContextAdapter context)
{
- return !MathUtils.isZero(value);
+ return !rsvc.getBoolean(RuntimeConstants.CHECK_EMPTY_OBJECTS, true) || !MathUtils.isZero(value);
}
}
Modified: velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTIntegerLiteral.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTIntegerLiteral.java?rev=1783746&r1=1783745&r2=1783746&view=diff
==============================================================================
--- velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTIntegerLiteral.java (original)
+++ velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTIntegerLiteral.java Mon Feb 20 11:51:14 2017
@@ -21,6 +21,7 @@ package org.apache.velocity.runtime.pars
import org.apache.velocity.context.InternalContextAdapter;
import org.apache.velocity.exception.TemplateInitException;
+import org.apache.velocity.runtime.RuntimeConstants;
import org.apache.velocity.runtime.parser.Parser;
import java.math.BigInteger;
@@ -112,6 +113,6 @@ public class ASTIntegerLiteral extends S
*/
public boolean evaluate( InternalContextAdapter context)
{
- return !MathUtils.isZero(value);
+ return !rsvc.getBoolean(RuntimeConstants.CHECK_EMPTY_OBJECTS, true) || !MathUtils.isZero(value);
}
}
Modified: velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTMap.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTMap.java?rev=1783746&r1=1783745&r2=1783746&view=diff
==============================================================================
--- velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTMap.java (original)
+++ velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTMap.java Mon Feb 20 11:51:14 2017
@@ -22,6 +22,7 @@ package org.apache.velocity.runtime.pars
import org.apache.velocity.context.InternalContextAdapter;
import org.apache.velocity.exception.MethodInvocationException;
import org.apache.velocity.exception.TemplateInitException;
+import org.apache.velocity.runtime.RuntimeConstants;
import org.apache.velocity.runtime.parser.Parser;
import java.util.LinkedHashMap;
@@ -102,6 +103,6 @@ public class ASTMap extends SimpleNode
*/
public boolean evaluate( InternalContextAdapter context)
{
- return children != null && children.length > 0;
+ return !rsvc.getBoolean(RuntimeConstants.CHECK_EMPTY_OBJECTS, true) || children != null && children.length > 0;
}
}
Modified: velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTObjectArray.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTObjectArray.java?rev=1783746&r1=1783745&r2=1783746&view=diff
==============================================================================
--- velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTObjectArray.java (original)
+++ velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTObjectArray.java Mon Feb 20 11:51:14 2017
@@ -22,6 +22,7 @@ package org.apache.velocity.runtime.pars
import org.apache.velocity.context.InternalContextAdapter;
import org.apache.velocity.exception.MethodInvocationException;
import org.apache.velocity.exception.TemplateInitException;
+import org.apache.velocity.runtime.RuntimeConstants;
import org.apache.velocity.runtime.parser.Parser;
import java.util.ArrayList;
@@ -93,6 +94,6 @@ public class ASTObjectArray extends Simp
*/
public boolean evaluate( InternalContextAdapter context)
{
- return children != null && children.length > 0;
+ return !rsvc.getBoolean(RuntimeConstants.CHECK_EMPTY_OBJECTS, true) || children != null && children.length > 0;
}
}
Modified: velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTReference.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTReference.java?rev=1783746&r1=1783745&r2=1783746&view=diff
==============================================================================
--- velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTReference.java (original)
+++ velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTReference.java Mon Feb 20 11:51:14 2017
@@ -72,6 +72,8 @@ public class ASTReference extends Simple
private String morePrefix = "";
private String identifier = "";
+ private boolean checkEmpty;
+
private String literal = null;
/**
@@ -169,6 +171,12 @@ public class ASTReference extends Simple
logOnNull =
rsvc.getBoolean(RuntimeConstants.RUNTIME_LOG_REFERENCE_LOG_INVALID, true);
+ /*
+ * whether to check for emptiness when evaluating
+ */
+ checkEmpty =
+ rsvc.getBoolean(RuntimeConstants.CHECK_EMPTY_OBJECTS, true);
+
/**
* In the case we are referencing a variable with #if($foo) or
* #if( ! $foo) then we allow variables to be undefined and we
@@ -579,7 +587,7 @@ public class ASTReference extends Simple
}
try
{
- return DuckType.asBoolean(value, rsvc.getBoolean(RuntimeConstants.CHECK_EMPTY_OBJECTS, true));
+ return DuckType.asBoolean(value, checkEmpty);
}
catch(Exception e)
{
Modified: velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTStringLiteral.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTStringLiteral.java?rev=1783746&r1=1783745&r2=1783746&view=diff
==============================================================================
--- velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTStringLiteral.java (original)
+++ velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTStringLiteral.java Mon Feb 20 11:51:14 2017
@@ -348,7 +348,7 @@ public class ASTStringLiteral extends Si
public boolean evaluate( InternalContextAdapter context)
{
String str = (String)value(context);
- return str != null && !str.isEmpty();
+ return str != null && (!rsvc.getBoolean(RuntimeConstants.CHECK_EMPTY_OBJECTS, true) || !str.isEmpty());
}
}
Copied: velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/IfEmptyNoEmptyCheckTestCase.java (from r1783739, velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/IfEmptyTestCase.java)
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/IfEmptyNoEmptyCheckTestCase.java?p2=velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/IfEmptyNoEmptyCheckTestCase.java&p1=velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/IfEmptyTestCase.java&r1=1783739&r2=1783746&rev=1783746&view=diff
==============================================================================
--- velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/IfEmptyTestCase.java (original)
+++ velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/IfEmptyNoEmptyCheckTestCase.java Mon Feb 20 11:51:14 2017
@@ -19,10 +19,13 @@ package org.apache.velocity.test;
* under the License.
*/
+import org.apache.velocity.app.VelocityEngine;
+import org.apache.velocity.runtime.RuntimeConstants;
+
import java.math.BigDecimal;
import java.math.BigInteger;
-import java.util.Collections;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
@@ -30,13 +33,19 @@ import java.util.TreeMap;
/**
* Used to check that empty values are properly handled in #if statements
*/
-public class IfEmptyTestCase extends BaseTestCase
+public class IfEmptyNoEmptyCheckTestCase extends BaseTestCase
{
- public IfEmptyTestCase(final String name)
+ public IfEmptyNoEmptyCheckTestCase(final String name)
{
super(name);
}
+ @Override
+ protected void setUpEngine(VelocityEngine engine)
+ {
+ engine.setProperty(RuntimeConstants.CHECK_EMPTY_OBJECTS, "false");
+ }
+
protected void assertEmpty(Object obj)
{
context.put("obj", obj);
@@ -52,54 +61,44 @@ public class IfEmptyTestCase extends Bas
public void testNull()
{
assertEmpty(null);
- assertEmpty(new NullAsString());
- assertEmpty(new NullAsNumber());
+ assertNotEmpty(new NullAsString());
+ assertNotEmpty(new NullAsNumber());
}
public void testDataStructures()
{
- assertEmpty(Collections.emptyMap());
- assertEmpty(Collections.emptyList());
- assertEmpty(new Object[]{});
- List list = new ArrayList();
- list.add(1);
- assertNotEmpty(list);
- Map map = new TreeMap();
- map.put("foo", 1);
- assertNotEmpty(map);
+ assertNotEmpty(Collections.emptyMap());
+ assertNotEmpty(Collections.emptyList());
+ assertNotEmpty(new Object[]{});
}
public void testString()
{
- assertEmpty("");
- assertEmpty(new EmptyAsString());
- assertNotEmpty("hello");
+ assertNotEmpty("");
+ assertNotEmpty(new EmptyAsString());
}
public void testNumber()
{
- assertEmpty(0);
- assertEmpty(0L);
- assertEmpty(0.0f);
- assertEmpty(0.0);
- assertEmpty(BigInteger.ZERO);
- assertEmpty(BigDecimal.ZERO);
- assertNotEmpty(1);
- assertNotEmpty(1L);
- assertNotEmpty(1.0f);
- assertNotEmpty(1.0);
- assertNotEmpty(BigInteger.ONE);
- assertNotEmpty(BigDecimal.ONE);
+ assertNotEmpty(0);
}
public void testStringBuilder()
{
StringBuilder builder = new StringBuilder();
- assertEmpty(builder);
- builder.append("yo");
assertNotEmpty(builder);
}
+ public void testLiterals()
+ {
+ assertEvalEquals("", "#if( !0 )fail#end");
+ assertEvalEquals("", "#if( !0.0 )fail#end");
+ assertEvalEquals("", "#if( !'' )fail#end");
+ assertEvalEquals("", "#if( !\"\" )fail#end");
+ assertEvalEquals("", "#if( ![] )fail#end");
+ assertEvalEquals("", "#if( !{} )fail#end");
+ }
+
public static class NullAsString
{
public String getAsString()