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()


Reply via email to