Author: hlship
Date: Fri Feb 19 18:54:00 2010
New Revision: 911924

URL: http://svn.apache.org/viewvc?rev=911924&view=rev
Log:
Add createMethod() to ClassTransformation

Modified:
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/InternalClassTransformationImpl.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ClassTransformation.java

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/InternalClassTransformationImpl.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/InternalClassTransformationImpl.java?rev=911924&r1=911923&r2=911924&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/InternalClassTransformationImpl.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/InternalClassTransformationImpl.java
 Fri Feb 19 18:54:00 2010
@@ -1182,6 +1182,25 @@
         addOrReplaceMethod(signature, methodBody, true);
     }
 
+    public TransformMethod createMethod(TransformMethodSignature signature)
+    {
+        failIfFrozen();
+
+        if (methods.containsKey(signature))
+            throw new RuntimeException(String.format(
+                    "Unable to create new method %s as it already exists in 
class %s.", signature, getClassName()));
+
+        return addOrReplaceMethod(signature, null, true);
+    }
+
+    /**
+     * @param signature
+     *            of method to add
+     * @param methodBody
+     *            or null for default
+     * @param addAsNew
+     *            if true, then fields in the method will not be transformed
+     */
     private TransformMethodImpl addOrReplaceMethod(TransformMethodSignature 
signature, String methodBody,
             boolean addAsNew)
     {
@@ -1437,7 +1456,10 @@
             description.append(exceptionTypes[i]);
         }
 
-        formatter.format("\n%s\n\n", methodBody);
+        if (methodBody != null)
+            formatter.format("\n%s", methodBody);
+
+        description.append("\n\n");
     }
 
     public TransformMethod getMethod(TransformMethodSignature signature)

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ClassTransformation.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ClassTransformation.java?rev=911924&r1=911923&r2=911924&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ClassTransformation.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ClassTransformation.java
 Fri Feb 19 18:54:00 2010
@@ -24,6 +24,8 @@
 import org.apache.tapestry5.ioc.Predicate;
 import org.slf4j.Logger;
 
+import sun.awt.ComponentFactory;
+
 /**
  * Contains class-specific information used when transforming a raw component 
class into an
  * executable component class.
@@ -436,6 +438,8 @@
      * component. This will be a protected field, accessible to the class and 
subclasses.
      * 
      * @return name of field
+     * @deprecated Obtain the resources from {...@link 
ComponentMethodInvocation#getComponentResources()} or
+     *             as passed to {...@link 
ComponentValueProvider#get(ComponentResources)} instead
      */
     String getResourcesFieldName();
 
@@ -447,10 +451,21 @@
      * remember to invoke the super class implemetation explicitly. Use this 
method to control when
      * the super-class
      * implementation is invoked.
+     * 
+     * @deprecated Use {...@link #createMethod(TransformMethodSignature)} 
instead
      */
     void addMethod(TransformMethodSignature signature, String methodBody);
 
     /**
+     * Creates a new method as a declared method of the class, with an empty 
(default) body that
+     * does nothing. Non-void methods will return null, false or 0. The method 
must not yet exist.
+     * 
+     * @param signature
+     *            defines the method to create
+     */
+    TransformMethod createMethod(TransformMethodSignature signature);
+
+    /**
      * As with {...@link #addMethod(TransformMethodSignature, String)}, but 
field references inside the
      * method <em>will</em> be transformed, and the method <em>must not 
already exist</em>.
      */


Reply via email to