Author: hlship
Date: Thu Apr 14 00:33:08 2011
New Revision: 1091979

URL: http://svn.apache.org/viewvc?rev=1091979&view=rev
Log:
TAP5-853: Eliminate the need for seperate getRoot() and navigate() methods in 
single term property expressions

Modified:
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PropertyConduitSourceImpl.java

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PropertyConduitSourceImpl.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PropertyConduitSourceImpl.java?rev=1091979&r1=1091978&r2=1091979&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PropertyConduitSourceImpl.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PropertyConduitSourceImpl.java
 Thu Apr 14 00:33:08 2011
@@ -383,28 +383,32 @@ public class PropertyConduitSourceImpl i
                 node = node.getChild(1);
             }
 
-            // TODO: Optimization -- navigate method not needed (i.e., same as 
getRoot) for simple
-            // expressions.
-
             Class activeClass = GenericsUtils.asClass(activeType);
 
-            navMethod = 
plasticClass.introducePrivateMethod(PlasticUtils.toTypeName(activeClass), 
"navigate",
-                    SINGLE_OBJECT_ARGUMENT, null);
-
-            navMethod.changeImplementation(new InstructionBuilderCallback()
+            if (callbacks.isEmpty())
             {
-                public void doBuild(InstructionBuilder builder)
-                {
-                    
builder.loadThis().loadArgument(0).invokeVirtual(getRootMethod);
+                navMethod = getRootMethod;
+            }
+            else
+            {
+                navMethod = 
plasticClass.introducePrivateMethod(PlasticUtils.toTypeName(activeClass), 
"navigate",
+                        SINGLE_OBJECT_ARGUMENT, null);
 
-                    for (InstructionBuilderCallback callback : callbacks)
+                navMethod.changeImplementation(new InstructionBuilderCallback()
+                {
+                    public void doBuild(InstructionBuilder builder)
                     {
-                        callback.doBuild(builder);
-                    }
+                        
builder.loadThis().loadArgument(0).invokeVirtual(getRootMethod);
 
-                    builder.returnResult();
-                }
-            });
+                        for (InstructionBuilderCallback callback : callbacks)
+                        {
+                            callback.doBuild(builder);
+                        }
+
+                        builder.returnResult();
+                    }
+                });
+            }
 
             implementAccessors(activeType, node);
         }


Reply via email to