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 2016/12/02 17:26:34 UTC

svn commit: r1772379 - /velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTReference.java

Author: cbrisson
Date: Fri Dec  2 17:26:34 2016
New Revision: 1772379

URL: http://svn.apache.org/viewvc?rev=1772379&view=rev
Log:
[engine] be nicer with upberspectors that don't check that the base object is not null

Modified:
    velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTReference.java

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=1772379&r1=1772378&r2=1772379&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 Fri Dec  2 17:26:34 2016
@@ -297,17 +297,8 @@ public class ASTReference extends Simple
                 if (result == null && !strictRef)  // If strict and null then well catch this
                                                    // next time through the loop
                 {
-                    // do not call bad reference handler if the getter is present
-                    // (it means the getter has been called and returned null)
-                    // do not either for a quiet reference or if the *last* child failed while testing the reference
-                    Object getter = context.icacheGet(jjtGetChild(i));
-                    if (getter == null &&
-                            referenceType != QUIET_REFERENCE  &&
-                            (!onlyTestingReference || i < jjtGetNumChildren() - 1))
-                    {
-                        failedChild = i;
-                        break;
-                    }
+                    failedChild = i;
+                    break;
                 }
             }
 
@@ -328,32 +319,42 @@ public class ASTReference extends Simple
                 }
                 else
                 {
-                    StringBuffer name = new StringBuffer("$").append(rootString);
-                    for (int i = 0; i <= failedChild; i++)
+                    Node child = jjtGetChild(failedChild);
+                    // do not call bad reference handler if the getter is present
+                    // (it means the getter has been called and returned null)
+                    // do not either for a quiet reference or if the *last* child failed while testing the reference
+                    Object getter = context.icacheGet(child);
+                    if (getter == null &&
+                        referenceType != QUIET_REFERENCE  &&
+                        (!onlyTestingReference || failedChild < jjtGetNumChildren() - 1))
                     {
-                        Node node = jjtGetChild(i);
-                        if (node instanceof ASTMethod)
+                        StringBuffer name = new StringBuffer("$").append(rootString);
+                        for (int i = 0; i <= failedChild; i++)
+                        {
+                            Node node = jjtGetChild(i);
+                            if (node instanceof ASTMethod)
+                            {
+                                name.append(".").append(((ASTMethod) node).getMethodName()).append("()");
+                            }
+                            else
+                            {
+                                name.append(".").append(node.getFirstTokenImage());
+                            }
+                        }
+
+                        if (child instanceof ASTMethod)
                         {
-                            name.append(".").append(((ASTMethod) node).getMethodName()).append("()");
+                            String methodName = ((ASTMethod) jjtGetChild(failedChild)).getMethodName();
+                            result = EventHandlerUtil.invalidMethod(rsvc, context,
+                                name.toString(), previousResult, methodName, uberInfo);
                         }
                         else
                         {
-                            name.append(".").append(node.getFirstTokenImage());
+                            String property = jjtGetChild(failedChild).getFirstTokenImage();
+                            result = EventHandlerUtil.invalidGetMethod(rsvc, context,
+                                name.toString(), previousResult, property, uberInfo);
                         }
                     }
-                    
-                    if (jjtGetChild(failedChild) instanceof ASTMethod)
-                    {
-                        String methodName = ((ASTMethod) jjtGetChild(failedChild)).getMethodName();
-                        result = EventHandlerUtil.invalidMethod(rsvc, context,
-                                name.toString(), previousResult, methodName, uberInfo);                                                                
-                    }
-                    else
-                    {
-                        String property = jjtGetChild(failedChild).getFirstTokenImage();
-                        result = EventHandlerUtil.invalidGetMethod(rsvc, context, 
-                                name.toString(), previousResult, property, uberInfo);                        
-                    }
                 }
                 
             }