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 2005/10/22 22:20:00 UTC
svn commit: r327692 - in /jakarta/tapestry/trunk:
framework/src/java/org/apache/tapestry/enhance/InjectAssetWorker.java
framework/src/test/org/apache/tapestry/enhance/TestInjectAssetWorker.java
status.xml
Author: hlship
Date: Sat Oct 22 13:19:55 2005
New Revision: 327692
URL: http://svn.apache.org/viewcvs?rev=327692&view=rev
Log:
TAPESTRY-718: Asset injection makes assets appear as null inside finishLoad()
Modified:
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/enhance/InjectAssetWorker.java
jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/enhance/TestInjectAssetWorker.java
jakarta/tapestry/trunk/status.xml
Modified: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/enhance/InjectAssetWorker.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/enhance/InjectAssetWorker.java?rev=327692&r1=327691&r2=327692&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/enhance/InjectAssetWorker.java (original)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/enhance/InjectAssetWorker.java Sat Oct 22 13:19:55 2005
@@ -14,14 +14,15 @@
package org.apache.tapestry.enhance;
+import java.lang.reflect.Modifier;
import java.util.Iterator;
import org.apache.hivemind.ApplicationRuntimeException;
import org.apache.hivemind.ErrorLog;
import org.apache.hivemind.Location;
+import org.apache.hivemind.service.MethodSignature;
import org.apache.hivemind.util.Defense;
import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IComponent;
import org.apache.tapestry.spec.IAssetSpecification;
import org.apache.tapestry.spec.IComponentSpecification;
@@ -61,7 +62,8 @@
}
}
- public void injectAsset(EnhancementOperation op, String assetName, String propertyName, Location location)
+ public void injectAsset(EnhancementOperation op, String assetName, String propertyName,
+ Location location)
{
Defense.notNull(op, "op");
Defense.notNull(assetName, "assetName");
@@ -77,17 +79,13 @@
propertyType,
IAsset.class));
- String fieldName = "_$" + propertyName;
+ String methodName = op.getAccessorMethodName(propertyName);
- op.addField(fieldName, propertyType);
+ MethodSignature sig = new MethodSignature(propertyType, methodName, null, null);
- EnhanceUtils.createSimpleAccessor(op, fieldName, propertyName, propertyType, location);
+ String code = "return getAsset(\"" + assetName + "\");";
- // i.e. _$fred = getAsset("barney");
-
- String code = fieldName + " = getAsset(\"" + assetName + "\");";
-
- op.extendMethodImplementation(IComponent.class, EnhanceUtils.FINISH_LOAD_SIGNATURE, code);
+ op.addMethod(Modifier.PUBLIC, sig, code, location);
}
public void setErrorLog(ErrorLog errorLog)
Modified: jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/enhance/TestInjectAssetWorker.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/enhance/TestInjectAssetWorker.java?rev=327692&r1=327691&r2=327692&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/enhance/TestInjectAssetWorker.java (original)
+++ jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/enhance/TestInjectAssetWorker.java Sat Oct 22 13:19:55 2005
@@ -44,22 +44,26 @@
as.setPropertyName(propertyName);
as.setLocation(location);
- MockControl control = newControl(IComponentSpecification.class);
- IComponentSpecification spec = (IComponentSpecification) control.getMock();
+ IComponentSpecification spec = newSpec();
spec.getAssetNames();
- control.setReturnValue(Collections.singletonList(assetName));
+ setReturnValue(spec, Collections.singletonList(assetName));
spec.getAsset(assetName);
- control.setReturnValue(as);
+ setReturnValue(spec, as);
return spec;
}
+ protected IComponentSpecification newSpec()
+ {
+ return (IComponentSpecification) newMock(IComponentSpecification.class);
+ }
+
public void testNoWork()
{
IComponentSpecification spec = newSpec("fred", null, null);
- EnhancementOperation op = (EnhancementOperation) newMock(EnhancementOperation.class);
+ EnhancementOperation op = newEnhancementOp();
replayControls();
@@ -68,34 +72,29 @@
verifyControls();
}
+ protected EnhancementOperation newEnhancementOp()
+ {
+ return (EnhancementOperation) newMock(EnhancementOperation.class);
+ }
+
public void testSuccess()
{
Location l = newLocation();
IComponentSpecification spec = newSpec("fred", "barney", l);
- MockControl control = newControl(EnhancementOperation.class);
- EnhancementOperation op = (EnhancementOperation) control.getMock();
+ EnhancementOperation op = newEnhancementOp();
- op.getPropertyType("barney");
- control.setReturnValue(IAsset.class);
+ trainGetPropertyType(op, "barney", IAsset.class);
op.claimReadonlyProperty("barney");
- op.addField("_$barney", IAsset.class);
-
- op.getAccessorMethodName("barney");
- control.setReturnValue("getBarney");
+ trainGetAccessorMethodName(op, "barney", "getBarney");
op.addMethod(
Modifier.PUBLIC,
new MethodSignature(IAsset.class, "getBarney", null, null),
- "return _$barney;",
+ "return getAsset(\"fred\");",
l);
- op.extendMethodImplementation(
- IComponent.class,
- EnhanceUtils.FINISH_LOAD_SIGNATURE,
- "_$barney = getAsset(\"fred\");");
-
replayControls();
new InjectAssetWorker().performEnhancement(op, spec);
@@ -103,26 +102,36 @@
verifyControls();
}
+ protected void trainGetAccessorMethodName(EnhancementOperation op, String propertyName,
+ String methodName)
+ {
+ op.getAccessorMethodName(propertyName);
+ setReturnValue(op, methodName);
+ }
+
+ protected void trainGetPropertyType(EnhancementOperation op, String propertyName,
+ Class propertyType)
+ {
+ op.getPropertyType(propertyName);
+ setReturnValue(op, propertyType);
+ }
+
public void testFailure()
{
Location l = newLocation();
Throwable ex = new ApplicationRuntimeException(EnhanceMessages.claimedProperty("barney"));
-
- MockControl control = newControl(EnhancementOperation.class);
- EnhancementOperation op = (EnhancementOperation) control.getMock();
+ EnhancementOperation op = newEnhancementOp();
IComponentSpecification spec = newSpec("fred", "barney", l);
ErrorLog log = (ErrorLog) newMock(ErrorLog.class);
- op.getPropertyType("barney");
- control.setReturnValue(IComponent.class);
+ trainGetPropertyType(op, "barney", IComponent.class);
op.claimReadonlyProperty("barney");
- control.setThrowable(ex);
+ setThrowable(op, ex);
- op.getBaseClass();
- control.setReturnValue(BaseComponent.class);
+ trainGetBaseClass(op, BaseComponent.class);
log.error(EnhanceMessages.errorAddingProperty("barney", BaseComponent.class, ex), l, ex);
@@ -137,13 +146,17 @@
verifyControls();
}
+ private void trainGetBaseClass(EnhancementOperation op, Class baseClass)
+ {
+ op.getBaseClass();
+ setReturnValue(op, baseClass);
+ }
+
public void testWrongPropertyType()
{
- MockControl control = newControl(EnhancementOperation.class);
- EnhancementOperation op = (EnhancementOperation) control.getMock();
+ EnhancementOperation op = newEnhancementOp();
- op.getPropertyType("barney");
- control.setReturnValue(IComponent.class);
+ trainGetPropertyType(op, "barney", IComponent.class);
op.claimReadonlyProperty("barney");
Modified: jakarta/tapestry/trunk/status.xml
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/status.xml?rev=327692&r1=327691&r2=327692&view=diff
==============================================================================
--- jakarta/tapestry/trunk/status.xml (original)
+++ jakarta/tapestry/trunk/status.xml Sat Oct 22 13:19:55 2005
@@ -51,7 +51,7 @@
</todo>
<changes>
<release version="4.0-beta-12" date="unreleased">
-
+ <action type="fix" dev="HLS" fixes-bug="TAPESTRY-718">Asset injection makes assets appear as null inside finishLoad()</action>
</release>
<release version="4.0-beta-11" date="Oct 16 2005">
<action type="fix" dev="HLS" fixes-bug="TAPESTRY-650">ClassNotFoundException thrown when deserializing an object from a client persistent property</action>
---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-dev-help@jakarta.apache.org