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/05/02 21:04:05 UTC

svn commit: r1098739 - in /tapestry/tapestry5/trunk: plastic/src/main/java/org/apache/tapestry5/plastic/ tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ tapestry-c...

Author: hlship
Date: Mon May  2 19:04:04 2011
New Revision: 1098739

URL: http://svn.apache.org/viewvc?rev=1098739&view=rev
Log:
TAP5-1508: Re-implement ImportWorker using ComponentClassTransformWorker2

Modified:
    tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/plastic/PlasticUtils.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ImportWorker.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentClassTransformWorker.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentInstanceOperation.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TransformConstants.java

Modified: tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/plastic/PlasticUtils.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/plastic/PlasticUtils.java?rev=1098739&r1=1098738&r2=1098739&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/plastic/PlasticUtils.java (original)
+++ tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/plastic/PlasticUtils.java Mon May  2 19:04:04 2011
@@ -114,4 +114,22 @@ public class PlasticUtils
             throw new RuntimeException(ex);
         }
     }
+
+    /**
+     * Uses {@link #getMethod(Class, String, Class...)} and wraps the result as a {@link MethodDescription}.
+     * 
+     * @param declaringClass
+     *            containing class
+     * @param name
+     *            name of method
+     * @param parameterTypes
+     *            types of parameters
+     * @return description for method
+     * @throws RuntimeException
+     *             if any error (such as method not found)
+     */
+    public static MethodDescription getMethodDescription(Class declaringClass, String name, Class... parameterTypes)
+    {
+        return new MethodDescription(getMethod(declaringClass, name, parameterTypes));
+    }
 }

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java?rev=1098739&r1=1098738&r2=1098739&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java Mon May  2 19:04:04 2011
@@ -333,8 +333,8 @@ public final class ComponentInstantiator
                 });
     }
 
-    private MethodDescription GET_COMPONENT_RESOURCES = new MethodDescription(PlasticUtils.getMethod(
-            ComponentResourcesAware.class, "getComponentResources"));
+    private MethodDescription GET_COMPONENT_RESOURCES = PlasticUtils.getMethodDescription(
+            ComponentResourcesAware.class, "getComponentResources");
 
     private void implementComponentInterface(PlasticClass plasticClass)
     {

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ImportWorker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ImportWorker.java?rev=1098739&r1=1098738&r2=1098739&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ImportWorker.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ImportWorker.java Mon May  2 19:04:04 2011
@@ -1,4 +1,4 @@
-// Copyright 2010 The Apache Software Foundation
+// Copyright 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.
@@ -14,8 +14,6 @@
 
 package org.apache.tapestry5.internal.transform;
 
-import java.lang.reflect.Modifier;
-import java.util.List;
 import java.util.Locale;
 
 import org.apache.tapestry5.Asset;
@@ -23,21 +21,29 @@ import org.apache.tapestry5.ComponentRes
 import org.apache.tapestry5.annotations.Import;
 import org.apache.tapestry5.annotations.SetupRender;
 import org.apache.tapestry5.func.F;
+import org.apache.tapestry5.func.Flow;
 import org.apache.tapestry5.func.Mapper;
 import org.apache.tapestry5.func.Worker;
 import org.apache.tapestry5.ioc.Resource;
 import org.apache.tapestry5.ioc.services.SymbolSource;
 import org.apache.tapestry5.model.MutableComponentModel;
-import org.apache.tapestry5.runtime.Component;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.plastic.FieldHandle;
+import org.apache.tapestry5.plastic.MethodAdvice;
+import org.apache.tapestry5.plastic.MethodInvocation;
+import org.apache.tapestry5.plastic.PlasticClass;
+import org.apache.tapestry5.plastic.PlasticMethod;
+import org.apache.tapestry5.services.AssetSource;
+import org.apache.tapestry5.services.TransformConstants;
 import org.apache.tapestry5.services.javascript.JavaScriptSupport;
+import org.apache.tapestry5.services.transform.ComponentClassTransformWorker2;
+import org.apache.tapestry5.services.transform.TransformationSupport;
 
 /**
  * Implements the {@link Import} annotation, both at the class and at the method level.
  * 
  * @since 5.2.0
  */
-public class ImportWorker implements ComponentClassTransformWorker
+public class ImportWorker implements ComponentClassTransformWorker2
 {
     private final JavaScriptSupport javascriptSupport;
 
@@ -68,59 +74,58 @@ public class ImportWorker implements Com
         this.assetSource = assetSource;
     }
 
-    public void transform(ClassTransformation transformation, MutableComponentModel model)
+    public void transform(PlasticClass componentClass, TransformationSupport support, MutableComponentModel model)
     {
-        processClassAnnotationAtSetupRenderPhase(transformation, model);
+        processClassAnnotationAtSetupRenderPhase(componentClass, model);
 
-        for (TransformMethod m : transformation.matchMethodsWithAnnotation(Import.class))
+        for (PlasticMethod m : componentClass.getMethodsWithAnnotation(Import.class))
         {
-            decorateMethod(transformation, model, m);
+            decorateMethod(componentClass, model, m);
         }
     }
 
-    private void processClassAnnotationAtSetupRenderPhase(ClassTransformation transformation,
-            MutableComponentModel model)
+    private void processClassAnnotationAtSetupRenderPhase(PlasticClass componentClass, MutableComponentModel model)
     {
-        Import annotation = transformation.getAnnotation(Import.class);
+        Import annotation = componentClass.getAnnotation(Import.class);
 
         if (annotation == null)
             return;
 
-        TransformMethod setupRender = transformation.getOrCreateMethod(TransformConstants.SETUP_RENDER_SIGNATURE);
+        PlasticMethod setupRender = componentClass.introduceMethod(TransformConstants.SETUP_RENDER_DESCRIPTION);
 
-        decorateMethod(transformation, model, setupRender, annotation);
+        decorateMethod(componentClass, model, setupRender, annotation);
 
         model.addRenderPhase(SetupRender.class);
     }
 
-    private void decorateMethod(ClassTransformation transformation, MutableComponentModel model, TransformMethod method)
+    private void decorateMethod(PlasticClass componentClass, MutableComponentModel model, PlasticMethod method)
     {
         Import annotation = method.getAnnotation(Import.class);
 
-        decorateMethod(transformation, model, method, annotation);
+        decorateMethod(componentClass, model, method, annotation);
     }
 
-    private void decorateMethod(ClassTransformation transformation, MutableComponentModel model,
-            TransformMethod method, Import annotation)
+    private void decorateMethod(PlasticClass componentClass, MutableComponentModel model, PlasticMethod method,
+            Import annotation)
     {
         importStacks(method, annotation.stack());
 
-        importLibraries(transformation, model, method, annotation.library());
+        importLibraries(componentClass, model, method, annotation.library());
 
-        importStylesheets(transformation, model, method, annotation.stylesheet());
+        importStylesheets(componentClass, model, method, annotation.stylesheet());
     }
 
-    private void importStacks(TransformMethod method, String[] stacks)
+    private void importStacks(PlasticMethod method, String[] stacks)
     {
         if (stacks.length != 0)
             method.addAdvice(createImportStackAdvice(stacks));
     }
 
-    private ComponentMethodAdvice createImportStackAdvice(final String[] stacks)
+    private MethodAdvice createImportStackAdvice(final String[] stacks)
     {
-        return new ComponentMethodAdvice()
+        return new MethodAdvice()
         {
-            public void advise(ComponentMethodInvocation invocation)
+            public void advise(MethodInvocation invocation)
             {
                 for (String stack : stacks)
                 {
@@ -132,31 +137,32 @@ public class ImportWorker implements Com
         };
     }
 
-    private void importLibraries(ClassTransformation transformation, MutableComponentModel model,
-            TransformMethod method, String[] paths)
+    private void importLibraries(PlasticClass plasticClass, MutableComponentModel model, PlasticMethod method,
+            String[] paths)
     {
-        decorateMethodWithOperation(transformation, model, method, paths, importLibrary);
+        decorateMethodWithOperation(plasticClass, model, method, paths, importLibrary);
     }
 
-    private void importStylesheets(ClassTransformation transformation, MutableComponentModel model,
-            TransformMethod method, String[] paths)
+    private void importStylesheets(PlasticClass plasticClass, MutableComponentModel model, PlasticMethod method,
+            String[] paths)
     {
-        decorateMethodWithOperation(transformation, model, method, paths, importStylesheet);
+        decorateMethodWithOperation(plasticClass, model, method, paths, importStylesheet);
     }
 
-    private void decorateMethodWithOperation(ClassTransformation transformation, MutableComponentModel model,
-            TransformMethod method, String[] paths, Worker<Asset> operation)
+    private void decorateMethodWithOperation(PlasticClass componentClass, MutableComponentModel model,
+            PlasticMethod method, String[] paths, Worker<Asset> operation)
     {
         if (paths.length == 0)
             return;
 
         String[] expandedPaths = expandPaths(paths);
 
-        FieldAccess access = createFieldForAssets(transformation);
+        FieldHandle assetListHandle = componentClass.introduceField(Asset[].class,
+                "importedAssets_" + method.getDescription().methodName).getHandle();
 
-        storeLocalizedAssetsAtPageLoad(transformation, model.getBaseResource(), expandedPaths, access);
+        storeLocalizedAssetsAtPageLoad(componentClass, model.getBaseResource(), expandedPaths, assetListHandle);
 
-        addMethodAssetOperationAdvice(method, access, operation);
+        addMethodAssetOperationAdvice(method, assetListHandle, operation);
     }
 
     private String[] expandPaths(String[] paths)
@@ -169,59 +175,50 @@ public class ImportWorker implements Com
         return result;
     }
 
-    private FieldAccess createFieldForAssets(ClassTransformation transformation)
+    private void storeLocalizedAssetsAtPageLoad(PlasticClass componentClass, final Resource baseResource,
+            final String[] expandedPaths, final FieldHandle access)
     {
-        TransformField field = transformation.createField(Modifier.PROTECTED, List.class.getName(), "includedAssets");
-
-        return field.getAccess();
-    }
-
-    private void storeLocalizedAssetsAtPageLoad(ClassTransformation transformation, final Resource baseResource,
-            final String[] expandedPaths, final FieldAccess access)
-    {
-        ComponentMethodAdvice advice = new ComponentMethodAdvice()
+        MethodAdvice advice = new MethodAdvice()
         {
-            public void advise(ComponentMethodInvocation invocation)
+            public void advise(MethodInvocation invocation)
             {
                 invocation.proceed();
 
-                ComponentResources resources = invocation.getComponentResources();
+                ComponentResources resources = invocation.getInstanceContext().get(ComponentResources.class);
 
-                List<Asset> assets = convertPathsToAssets(baseResource, resources.getLocale(), expandedPaths);
+                Asset[] assets = convertPathsToAssetArray(baseResource, resources.getLocale(), expandedPaths);
 
-                access.write(invocation.getInstance(), assets);
+                access.set(invocation.getInstance(), assets);
             }
         };
 
-        transformation.getOrCreateMethod(TransformConstants.CONTAINING_PAGE_DID_LOAD_SIGNATURE).addAdvice(advice);
+        componentClass.introduceMethod(TransformConstants.CONTAINING_PAGE_DID_LOAD_DESCRIPTION).addAdvice(advice);
     }
 
-    private List<Asset> convertPathsToAssets(final Resource baseResource, final Locale locale, String[] assetPaths)
+    private Asset[] convertPathsToAssetArray(final Resource baseResource, final Locale locale, String[] assetPaths)
     {
-
         return F.flow(assetPaths).map(new Mapper<String, Asset>()
         {
             public Asset map(String assetPath)
             {
                 return assetSource.getAsset(baseResource, assetPath, locale);
             }
-        }).toList();
+        }).toArray(Asset.class);
     }
 
-    private void addMethodAssetOperationAdvice(TransformMethod method, final FieldAccess access,
+    private void addMethodAssetOperationAdvice(PlasticMethod method, final FieldHandle access,
             final Worker<Asset> operation)
     {
-        ComponentInstanceOperation advice = new ComponentInstanceOperation()
+        method.addAdvice(new MethodAdvice()
         {
-
-            public void invoke(Component instance)
+            public void advise(MethodInvocation invocation)
             {
-                List<Asset> assets = (List<Asset>) access.read(instance);
+                Asset[] assets = (Asset[]) access.get(invocation.getInstance());
 
                 F.flow(assets).each(operation);
-            }
-        };
 
-        method.addOperationBefore(advice);
+                invocation.proceed();
+            }
+        });
     }
 }

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentClassTransformWorker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentClassTransformWorker.java?rev=1098739&r1=1098738&r2=1098739&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentClassTransformWorker.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentClassTransformWorker.java Mon May  2 19:04:04 2011
@@ -22,8 +22,7 @@ import org.apache.tapestry5.services.tra
  * multithreaded, ideally they should be stateless (all necessary state can be stored in the
  * {@link org.apache.tapestry5.services.ClassTransformation}).
  * 
- * @deprecated In 5.3
- * @see {@link ComponentClassTransformWorker2}
+ * @deprecated Deprecated in Tapestry 5.3; use {@link ComponentClassTransformWorker2}
  */
 public interface ComponentClassTransformWorker
 {

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentInstanceOperation.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentInstanceOperation.java?rev=1098739&r1=1098738&r2=1098739&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentInstanceOperation.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentInstanceOperation.java Mon May  2 19:04:04 2011
@@ -25,6 +25,7 @@ import org.apache.tapestry5.runtime.Comp
  * @since 5.2.0
  * @see TransformMethod#addOperationAfter(ComponentInstanceOperation)
  * @see TransformMethod#addOperationBefore(ComponentInstanceOperation)
+ * @deprecated Deprecated in 5.3 with no replacement
  */
 public interface ComponentInstanceOperation
 {

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=1098739&r1=1098738&r2=1098739&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 Mon May  2 19:04:04 2011
@@ -629,13 +629,16 @@ public final class TapestryModule
      * Adds a number of standard component class transform workers:
      * <ul>
      * <dt>Property</dt>
-     * <dd>Generates accessor methods if {@link org.apache.tapestry5.annotations.Property} annotation is present</dd>
+     * <dd>Generates accessor methods if {@link org.apache.tapestry5.annotations.Property} annotation is present</dd> *
+     * <dt>Import</dt>
+     * <dd>Supports the {@link Import} annotation</dd>
      * </ul>
      */
     @Contribute(ComponentClassTransformWorker2.class)
     public static void provideTransformWorkers(OrderedConfiguration<ComponentClassTransformWorker2> configuration)
     {
         configuration.add("Property", new PropertyWorker());
+        configuration.addInstance("Import", ImportWorker.class, "after:SetupRender");
     }
 
     /**
@@ -662,8 +665,6 @@ public final class TapestryModule
      * annotation</dd>
      * <dt>InjectBlock</dt>
      * <dd>Allows a block from the template to be injected into a field</dd>
-     * <dt>Import</dt>
-     * <dd>Supports the {@link Import} annotation</dd>
      * <dt>SupportsInformalParameters</dt>
      * <dd>Checks for the annotation</dd>
      * <dt>Meta</dt>
@@ -747,8 +748,6 @@ public final class TapestryModule
 
         configuration.addInstance("DiscardAfter", DiscardAfterWorker.class);
 
-        configuration.addInstance("Import", ImportWorker.class, "after:SetupRender");
-
         configuration.add("InvokePostRenderCleanupOnResources", new InvokePostRenderCleanupOnResourcesWorker());
 
         // These must come after Property, since they actually delete fields

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TransformConstants.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TransformConstants.java?rev=1098739&r1=1098738&r2=1098739&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TransformConstants.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TransformConstants.java Mon May  2 19:04:04 2011
@@ -1,10 +1,10 @@
-// Copyright 2006, 2007, 2008, 2009 The Apache Software Foundation
+// Copyright 2006, 2007, 2008, 2009, 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.
 // You may obtain a copy of the License at
 //
-//     http://www.apache.org/licenses/LICENSE-2.0
+// http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
 // distributed under the License is distributed on an "AS IS" BASIS,
@@ -14,42 +14,63 @@
 
 package org.apache.tapestry5.services;
 
+import java.lang.reflect.Modifier;
+
 import org.apache.tapestry5.MarkupWriter;
+import org.apache.tapestry5.plastic.MethodDescription;
+import org.apache.tapestry5.plastic.PlasticUtils;
+import org.apache.tapestry5.runtime.Component;
 import org.apache.tapestry5.runtime.ComponentEvent;
 import org.apache.tapestry5.runtime.Event;
-
-import java.lang.reflect.Modifier;
+import org.apache.tapestry5.runtime.PageLifecycleListener;
+import org.apache.tapestry5.services.transform.ComponentClassTransformWorker2;
 
 /**
- * Constants used by implementations of {@link org.apache.tapestry5.services.ComponentClassTransformWorker}.
+ * Constants used by implementations of {@link org.apache.tapestry5.services.ComponentClassTransformWorker} and
+ * {@link ComponentClassTransformWorker2}.
  * <p/>
- * Note: methods on transformed components will not be invoked <em>unless</em> {@linkplain
- * org.apache.tapestry5.model.MutableComponentModel#addRenderPhase(Class) the component model is updated to identify the
- * use of the corresponding render phase}.
+ * Note: methods on transformed components will not be invoked <em>unless</em>
+ * {@linkplain org.apache.tapestry5.model.MutableComponentModel#addRenderPhase(Class) the component model is updated to
+ * identify the use of the corresponding render phase}.
  */
 public final class TransformConstants
 {
     // Shared parameters of a whole bunch of lifecycle methods, representing the different
     // component render states.
-    private static final String[] RENDER_PHASE_METHOD_PARAMETERS = { MarkupWriter.class.getName(),
-            Event.class.getName() };
+    private static final String[] RENDER_PHASE_METHOD_PARAMETERS =
+    { MarkupWriter.class.getName(), Event.class.getName() };
+
+    private static final Class[] RENDER_PHASE_METHOD_PARAMETER_TYPES =
+    { MarkupWriter.class, Event.class };
 
     /**
-     * Signature for {@link org.apache.tapestry5.runtime.Component#dispatchComponentEvent(org.apache.tapestry5.runtime.ComponentEvent)}.
-     *
+     * Signature for
+     * {@link org.apache.tapestry5.runtime.Component#dispatchComponentEvent(org.apache.tapestry5.runtime.ComponentEvent)}
+     * .
+     * 
      * @see org.apache.tapestry5.annotations.OnEvent
      */
     public static final TransformMethodSignature DISPATCH_COMPONENT_EVENT = new TransformMethodSignature(
-            Modifier.PUBLIC, "boolean", "dispatchComponentEvent", new String[] { ComponentEvent.class.getName() },
-            null);
+            Modifier.PUBLIC, "boolean", "dispatchComponentEvent", new String[]
+            { ComponentEvent.class.getName() }, null);
 
     /**
      * Signature for {@link org.apache.tapestry5.runtime.PageLifecycleListener#containingPageDidLoad()}.
+     * 
+     * @deprecated Deprecated in 5.3, use {@link #CONTAINING_PAGE_DID_LOAD_DESCRIPTION}.
      */
     public static final TransformMethodSignature CONTAINING_PAGE_DID_LOAD_SIGNATURE = new TransformMethodSignature(
             "containingPageDidLoad");
 
     /**
+     * Description for {@link org.apache.tapestry5.runtime.PageLifecycleListener#containingPageDidLoad()}.
+     * 
+     * @since 5.3.0
+     */
+    public static final MethodDescription CONTAINING_PAGE_DID_LOAD_DESCRIPTION = PlasticUtils.getMethodDescription(
+            PageLifecycleListener.class, "containingPageDidLoad");
+
+    /**
      * Signature for {@link org.apache.tapestry5.runtime.Component#postRenderCleanup()}.
      */
     public static final TransformMethodSignature POST_RENDER_CLEANUP_SIGNATURE = new TransformMethodSignature(
@@ -69,7 +90,7 @@ public final class TransformConstants
 
     /**
      * Signature for {@link org.apache.tapestry5.runtime.PageLifecycleListener#restoreStateBeforePageAttach()}
-     *
+     * 
      * @since 5.1.0.1
      */
     public static final TransformMethodSignature RESTORE_STATE_BEFORE_PAGE_ATTACH_SIGNATURE = new TransformMethodSignature(
@@ -77,59 +98,66 @@ public final class TransformConstants
 
     /**
      * Signature for {@link org.apache.tapestry5.runtime.Component#setupRender(MarkupWriter, Event)}.
-     *
+     * 
      * @see org.apache.tapestry5.annotations.SetupRender
+     * @deprecated Deprecated in Tapestry 5.3, use {@link #SETUP_RENDER_DESCRIPTION}
      */
     public static final TransformMethodSignature SETUP_RENDER_SIGNATURE = renderPhaseSignature("setupRender");
 
     /**
+     * Description for {@link org.apache.tapestry5.runtime.Component#setupRender(MarkupWriter, Event)}.
+     * 
+     * @see org.apache.tapestry5.annotations.SetupRender
+     * @since 5.3.0
+     */
+    public static final MethodDescription SETUP_RENDER_DESCRIPTION = PlasticUtils.getMethodDescription(Component.class,
+            "setupRender", RENDER_PHASE_METHOD_PARAMETER_TYPES);
+
+    /**
      * Signature for {@link org.apache.tapestry5.runtime.Component#beginRender(MarkupWriter, Event)}.
-     *
+     * 
      * @see org.apache.tapestry5.annotations.BeginRender
      */
     public static final TransformMethodSignature BEGIN_RENDER_SIGNATURE = renderPhaseSignature("beginRender");
 
     /**
      * Signature for {@link org.apache.tapestry5.runtime.Component#beforeRenderTemplate(MarkupWriter, Event)}.
-     *
+     * 
      * @see org.apache.tapestry5.annotations.BeforeRenderTemplate
      */
-    public static final TransformMethodSignature BEFORE_RENDER_TEMPLATE_SIGNATURE = renderPhaseSignature(
-            "beforeRenderTemplate");
+    public static final TransformMethodSignature BEFORE_RENDER_TEMPLATE_SIGNATURE = renderPhaseSignature("beforeRenderTemplate");
 
     /**
      * Signature for {@link org.apache.tapestry5.runtime.Component#afterRenderTemplate(MarkupWriter, Event)}.
-     *
+     * 
      * @see org.apache.tapestry5.annotations.BeforeRenderTemplate
      */
-    public static final TransformMethodSignature AFTER_RENDER_TEMPLATE_SIGNATURE = renderPhaseSignature(
-            "afterRenderTemplate");
+    public static final TransformMethodSignature AFTER_RENDER_TEMPLATE_SIGNATURE = renderPhaseSignature("afterRenderTemplate");
 
     /**
      * Signature for {@link org.apache.tapestry5.runtime.Component#beforeRenderBody(MarkupWriter, Event)}.
-     *
+     * 
      * @see org.apache.tapestry5.annotations.BeforeRenderBody
      */
-    public static final TransformMethodSignature BEFORE_RENDER_BODY_SIGNATURE = renderPhaseSignature(
-            "beforeRenderBody");
+    public static final TransformMethodSignature BEFORE_RENDER_BODY_SIGNATURE = renderPhaseSignature("beforeRenderBody");
 
     /**
      * Signature for {@link org.apache.tapestry5.runtime.Component#afterRenderBody(MarkupWriter, Event)}.
-     *
+     * 
      * @see org.apache.tapestry5.annotations.AfterRenderBody
      */
     public static final TransformMethodSignature AFTER_RENDER_BODY_SIGNATURE = renderPhaseSignature("afterRenderBody");
 
     /**
      * Signature for {@link org.apache.tapestry5.runtime.Component#afterRender(MarkupWriter, Event)}
-     *
+     * 
      * @see org.apache.tapestry5.annotations.AfterRender
      */
     public static final TransformMethodSignature AFTER_RENDER_SIGNATURE = renderPhaseSignature("afterRender");
 
     /**
      * Signature for {@link org.apache.tapestry5.runtime.Component#cleanupRender(MarkupWriter, Event)}.
-     *
+     * 
      * @see org.apache.tapestry5.annotations.CleanupRender
      */
     public static final TransformMethodSignature CLEANUP_RENDER_SIGNATURE = renderPhaseSignature("cleanupRender");