Author: hlship
Date: Fri Feb 19 18:53:31 2010
New Revision: 911915

URL: http://svn.apache.org/viewvc?rev=911915&view=rev
Log:
Recode InvokePostRenderCleanupOnResourcesWorker using TransformMethod APIs

Modified:
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InvokePostRenderCleanupOnResourcesWorker.java

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InvokePostRenderCleanupOnResourcesWorker.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InvokePostRenderCleanupOnResourcesWorker.java?rev=911915&r1=911914&r2=911915&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InvokePostRenderCleanupOnResourcesWorker.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InvokePostRenderCleanupOnResourcesWorker.java
 Fri Feb 19 18:53:31 2010
@@ -1,10 +1,10 @@
-// Copyright 2008 The Apache Software Foundation
+// Copyright 2008, 2010 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,24 +14,43 @@
 
 package org.apache.tapestry5.internal.transform;
 
+import org.apache.tapestry5.internal.InternalComponentResources;
 import org.apache.tapestry5.model.MutableComponentModel;
 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.TransformConstants;
+import org.apache.tapestry5.services.TransformMethod;
 
 /**
- * Extends a <em>root</em> component class' postRenderCleanup() method to 
invoke {...@link
- * 
org.apache.tapestry5.internal.InternalComponentResources#postRenderCleanup()}.
+ * Extends a <em>root</em> component class' postRenderCleanup() method to 
invoke
+ * {...@link 
org.apache.tapestry5.internal.InternalComponentResources#postRenderCleanup()}.
  */
 public class InvokePostRenderCleanupOnResourcesWorker implements 
ComponentClassTransformWorker
 {
+    private final ComponentMethodAdvice advice = new ComponentMethodAdvice()
+    {
+        public void advise(ComponentMethodInvocation invocation)
+        {
+            invocation.proceed();
+
+            InternalComponentResources icr = (InternalComponentResources) 
invocation.getComponentResources();
+
+            icr.postRenderCleanup();
+        }
+    };
+
     public void transform(ClassTransformation transformation, 
MutableComponentModel model)
     {
-        if (!transformation.isRootTransformation()) return;
+        // Since the stuff to be cleaned up is inside the component resources, 
we don't need to
+        // do anything extra for a subclass; the root class will invoke the 
cleanup method.
+        
+        if (!transformation.isRootTransformation())
+            return;
 
-        String resourcesFieldName = transformation.getResourcesFieldName();
+        TransformMethod method = 
transformation.getMethod(TransformConstants.POST_RENDER_CLEANUP_SIGNATURE);
 
-        
transformation.extendMethod(TransformConstants.POST_RENDER_CLEANUP_SIGNATURE,
-                                    resourcesFieldName + 
".postRenderCleanup();");
+        method.addAdvice(advice);
     }
 }


Reply via email to