Author: hlship
Date: Thu Jul 21 18:19:40 2011
New Revision: 1149296

URL: http://svn.apache.org/viewvc?rev=1149296&view=rev
Log:
TAP5-1508: Rebuild RenderCommandWorker to new API and use less memory

Modified:
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/InternalComponentResources.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/InternalComponentResourcesImpl.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/RenderCommandWorker.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/InternalComponentResources.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/InternalComponentResources.java?rev=1149296&r1=1149295&r2=1149296&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/InternalComponentResources.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/InternalComponentResources.java
 Thu Jul 21 18:19:40 2011
@@ -1,4 +1,4 @@
-// Copyright 2006, 2007, 2008, 2009, 2010 The Apache Software Foundation
+// Copyright 2006, 2007, 2008, 2009, 2010, 2011 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -21,6 +21,7 @@ import org.apache.tapestry5.internal.str
 import org.apache.tapestry5.internal.structure.PageResetListener;
 import org.apache.tapestry5.internal.transform.ParameterConduit;
 import org.apache.tapestry5.runtime.PageLifecycleListener;
+import org.apache.tapestry5.runtime.RenderCommand;
 import org.apache.tapestry5.runtime.RenderQueue;
 
 /**
@@ -29,7 +30,7 @@ import org.apache.tapestry5.runtime.Rend
  * to the framework and not exposed in any public APIs.
  */
 public interface InternalComponentResources extends ComponentResources,
-        InternalComponentResourcesCommon
+        InternalComponentResourcesCommon, RenderCommand
 {
     /**
      * Get the current persisted value of the field.
@@ -59,10 +60,6 @@ public interface InternalComponentResour
      */
     void postRenderCleanup();
 
-    /**
-     * Invoked to make the receiver queue itself to be rendered.
-     */
-    void queueRender(RenderQueue queue);
 
     /**
      * Delegates to {@link 
Page#addResetListener(org.apache.tapestry5.internal.structure.PageResetListener)}.

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/InternalComponentResourcesImpl.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/InternalComponentResourcesImpl.java?rev=1149296&r1=1149295&r2=1149296&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/InternalComponentResourcesImpl.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/InternalComponentResourcesImpl.java
 Thu Jul 21 18:19:40 2011
@@ -431,11 +431,6 @@ public class InternalComponentResourcesI
         return element.getElementName(defaultElementName);
     }
 
-    public void queueRender(RenderQueue queue)
-    {
-        queue.push(element);
-    }
-
     public Block getBlock(String blockId)
     {
         return element.getBlock(blockId);
@@ -604,4 +599,9 @@ public class InternalComponentResourcesI
         return null;
     }
 
+    /** @since 5.3 */
+    public void render(MarkupWriter writer, RenderQueue queue)
+    {
+        queue.push(element);
+    }
 }

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/RenderCommandWorker.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/RenderCommandWorker.java?rev=1149296&r1=1149295&r2=1149296&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/RenderCommandWorker.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/RenderCommandWorker.java
 Thu Jul 21 18:19:40 2011
@@ -1,4 +1,4 @@
-// Copyright 2007, 2008, 2010 The Apache Software Foundation
+// Copyright 2007, 2008, 2010, 2011 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -17,47 +17,37 @@ package org.apache.tapestry5.internal.tr
 import org.apache.tapestry5.MarkupWriter;
 import org.apache.tapestry5.internal.InternalComponentResources;
 import org.apache.tapestry5.model.MutableComponentModel;
+import org.apache.tapestry5.plastic.MethodDescription;
+import org.apache.tapestry5.plastic.PlasticClass;
+import org.apache.tapestry5.plastic.PlasticField;
+import org.apache.tapestry5.plastic.PlasticUtils;
 import org.apache.tapestry5.runtime.RenderCommand;
 import org.apache.tapestry5.runtime.RenderQueue;
-import org.apache.tapestry5.services.ClassTransformation;
-import org.apache.tapestry5.services.ComponentClassTransformWorker;
-import org.apache.tapestry5.services.ComponentMethodAdvice;
-import org.apache.tapestry5.services.ComponentMethodInvocation;
-import org.apache.tapestry5.services.TransformMethodSignature;
-
-import java.lang.reflect.Modifier;
+import org.apache.tapestry5.services.transform.ComponentClassTransformWorker2;
+import org.apache.tapestry5.services.transform.TransformationSupport;
 
 /**
  * Ensures that all components implement {@link RenderCommand} by delegating to
- * {@link 
org.apache.tapestry5.internal.InternalComponentResources#queueRender(org.apache.tapestry5.runtime.RenderQueue)}
- * .
+ * {@link InternalComponentResources#render(org.apache.tapestry5.MarkupWriter, 
org.apache.tapestry5.runtime.RenderQueue)}.
  */
-public class RenderCommandWorker implements ComponentClassTransformWorker
+public class RenderCommandWorker implements ComponentClassTransformWorker2
 {
-    private final TransformMethodSignature RENDER_SIGNATURE = new 
TransformMethodSignature(Modifier.PUBLIC, "void",
-            "render", new String[]
-            { MarkupWriter.class.getName(), RenderQueue.class.getName() }, 
null);
-
-    private final ComponentMethodAdvice advice = new ComponentMethodAdvice()
-    {
-        public void advise(ComponentMethodInvocation invocation)
-        {
-            InternalComponentResources resources = 
(InternalComponentResources) invocation.getComponentResources();
-
-            RenderQueue queue = (RenderQueue) invocation.getParameter(1);
 
-            resources.queueRender(queue);
-        }
-    };
+    private final MethodDescription RENDER_DESCRIPTION = 
PlasticUtils.getMethodDescription(RenderCommand.class, "render", 
MarkupWriter.class, RenderQueue.class);
 
-    public void transform(ClassTransformation transformation, 
MutableComponentModel model)
+    public void transform(PlasticClass plasticClass, TransformationSupport 
support, MutableComponentModel model)
     {
         // Subclasses don't need to bother, they'll inherit from super-classes.
-        if (!transformation.isRootTransformation())
+
+        if (!support.isRootTransformation())
+        {
             return;
+        }
+
+        plasticClass.introduceInterface(RenderCommand.class);
 
-        transformation.addImplementedInterface(RenderCommand.class);
+        PlasticField resourcesField = 
plasticClass.introduceField(InternalComponentResources.class, 
"resources").injectFromInstanceContext();
 
-        transformation.getOrCreateMethod(RENDER_SIGNATURE).addAdvice(advice);
+        
plasticClass.introduceMethod(RENDER_DESCRIPTION).delegateTo(resourcesField);
     }
 }

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java?rev=1149296&r1=1149295&r2=1149296&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
 Thu Jul 21 18:19:40 2011
@@ -505,6 +505,8 @@ public final class TapestryModule
      * <dd>Manages unclaimed fields, storing their value in a {@link 
PerThreadValue}</dd>
      * <dt>OnEvent</dt>
      * <dd>Handle the @OnEvent annotation, and related naming convention</dd>
+     * <dt>RenderCommand</dt>
+     * <dd>Ensures all components also implement {@link 
org.apache.tapestry5.runtime.RenderCommand}</dd>
      * </ul>
      */
     @Contribute(ComponentClassTransformWorker2.class)
@@ -515,6 +517,7 @@ public final class TapestryModule
         configuration.add("Property", new PropertyWorker());
         configuration.addInstance("Import", ImportWorker.class, 
"after:SetupRender");
 
+        configuration.add("RenderCommand", new RenderCommandWorker());
 
         configuration.addInstance("OnEvent", OnEventWorker.class);
 
@@ -574,8 +577,6 @@ public final class TapestryModule
      * <dd>Checks for meta data annotations and adds it to the component 
model</dd>
      * <dt>ApplicationState</dt>
      * <dd>Converts fields that reference application state objects
-     * <dt>RenderCommand</dt>
-     * <dd>Ensures all components also implement {@link 
org.apache.tapestry5.runtime.RenderCommand}</dd>
      * <dt>RenderPhase</dt>
      * <dd>Link in render phaes methods</dd>
      * <dt>InvokePostRenderCleanupOnResources</dt>
@@ -614,9 +615,6 @@ public final class TapestryModule
                 .addInstance("ActivationRequestParameter", 
ActivationRequestParameterWorker.class, "after:OnEvent");
         configuration.add("SupportsInformalParameters", new 
SupportsInformalParametersWorker());
 
-        configuration.add("RenderCommand", new RenderCommandWorker());
-
-
         configuration.addInstance("RenderPhase", 
RenderPhaseMethodWorker.class);
 
         // Ideally, these should be ordered pretty late in the process to make


Reply via email to