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>.
*/