Author: cbrisson
Date: Sun Oct 14 13:33:57 2018
New Revision: 1843836

URL: http://svn.apache.org/viewvc?rev=1843836&view=rev
Log:
[VELOCITY-855] Fix methods caching for references of type Class

Added:
    
velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/issues/Velocity855TestCase.java
   (with props)
Modified:
    
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTIdentifier.java
    
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/util/ClassUtils.java

Modified: 
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTIdentifier.java
URL: 
http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTIdentifier.java?rev=1843836&r1=1843835&r2=1843836&view=diff
==============================================================================
--- 
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTIdentifier.java
 (original)
+++ 
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTIdentifier.java
 Sun Oct 14 13:33:57 2018
@@ -137,6 +137,7 @@ public class ASTIdentifier extends Simpl
              */
 
             IntrospectionCacheData icd = context.icacheGet(this);
+            Class clazz = o instanceof Class ? (Class)o : o.getClass();
 
             /*
              * if we have the cache data and the class of the object we are
@@ -145,7 +146,7 @@ public class ASTIdentifier extends Simpl
              * that is fixed in the template :)
              */
 
-            if ( icd != null && (o != null) && (icd.contextData == 
o.getClass()) )
+            if ( icd != null && (o != null) && (icd.contextData == clazz) )
             {
                 vg = (VelPropertyGet) icd.thingy;
             }
@@ -161,7 +162,7 @@ public class ASTIdentifier extends Simpl
                 if (vg != null && vg.isCacheable() && (o != null))
                 {
                     icd = new IntrospectionCacheData();
-                    icd.contextData = o.getClass();
+                    icd.contextData = clazz;
                     icd.thingy = vg;
                     context.icachePut(this,icd);
                 }

Modified: 
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/util/ClassUtils.java
URL: 
http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/util/ClassUtils.java?rev=1843836&r1=1843835&r2=1843836&view=diff
==============================================================================
--- 
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/util/ClassUtils.java
 (original)
+++ 
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/util/ClassUtils.java
 Sun Oct 14 13:33:57 2018
@@ -181,12 +181,13 @@ public class ClassUtils {
        */
       MethodCacheKey mck = new MethodCacheKey(methodName, paramClasses);
       IntrospectionCacheData icd = context.icacheGet(mck);
+      Class clazz = o instanceof Class ? (Class)o : o.getClass();
 
       /*
        * like ASTIdentifier, if we have cache information, and the Class of
        * Object o is the same as that in the cache, we are safe.
        */
-      if (icd != null && (o != null && icd.contextData == o.getClass()))
+      if (icd != null && (o != null && icd.contextData == clazz))
       {
 
         /*
@@ -205,7 +206,7 @@ public class ClassUtils {
         if ((method != null) && (o != null))
         {
           icd = new IntrospectionCacheData();
-          icd.contextData = o.getClass();
+          icd.contextData = clazz;
           icd.thingy = method;
 
           context.icachePut(mck, icd);

Added: 
velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/issues/Velocity855TestCase.java
URL: 
http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/issues/Velocity855TestCase.java?rev=1843836&view=auto
==============================================================================
--- 
velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/issues/Velocity855TestCase.java
 (added)
+++ 
velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/issues/Velocity855TestCase.java
 Sun Oct 14 13:33:57 2018
@@ -0,0 +1,46 @@
+package org.apache.velocity.test.issues;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.test.BaseTestCase;
+
+/**
+ * This class tests VELOCITY-855.
+ */
+public class Velocity855TestCase extends BaseTestCase
+{
+
+    public Velocity855TestCase(String name)
+    {
+        super(name);
+    }
+
+    protected void setUpContext(VelocityContext context)
+    {
+        context.put("elementKind", javax.lang.model.element.ElementKind.class);
+        context.put("typeKind", javax.lang.model.type.TypeKind.class);
+    }
+
+    public void testSpaceBeforeRParen()
+    {
+        assertEvalEquals("ENUM DECLARED", "$elementKind.valueOf('ENUM') 
$typeKind.valueOf('DECLARED')");
+    }
+}

Propchange: 
velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/issues/Velocity855TestCase.java
------------------------------------------------------------------------------
    svn:executable = *


Reply via email to