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