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);                        
-                    }
                 }
                 
             }


Reply via email to