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