You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2011/04/14 02:33:08 UTC
svn commit: r1091979 -
/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PropertyConduitSourceImpl.java
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);
}