You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2011/04/30 00:55:47 UTC

svn commit: r1097999 - /tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/BridgeClassTransformation.java

Author: hlship
Date: Fri Apr 29 22:55:46 2011
New Revision: 1097999

URL: http://svn.apache.org/viewvc?rev=1097999&view=rev
Log:
TAP5-853: Reimplement replaceAccess(TransformField) in terms of the revised FieldConduit interface (which exposes the object instance)

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

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/BridgeClassTransformation.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/BridgeClassTransformation.java?rev=1097999&r1=1097998&r2=1097999&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/BridgeClassTransformation.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/BridgeClassTransformation.java Fri Apr 29 22:55:46 2011
@@ -165,9 +165,34 @@ public class BridgeClassTransformation i
             });
         }
 
+        /**
+         * We assume that the conduit field contains a {@link FieldValueConduit}, and that the field
+         * was introduced through this instance of BridgeClassTransformation.
+         */
         public void replaceAccess(TransformField conduitField)
         {
-            throw new IllegalStateException("replaceAccess() not yet implemented.");
+            // Ugly:
+            PlasticField conduitFieldPlastic = ((BridgeTransformField) conduitField).plasticField;
+
+            final FieldHandle conduitHandle = conduitFieldPlastic.getHandle();
+
+            plasticField.setConduit(new FieldConduit<Object>()
+            {
+                private FieldValueConduit conduit(Object instance)
+                {
+                    return (FieldValueConduit) conduitHandle.get(instance);
+                }
+
+                public Object get(Object instance, InstanceContext context)
+                {
+                    return conduit(instance).get();
+                }
+
+                public void set(Object instance, InstanceContext context, Object newValue)
+                {
+                    conduit(instance).set(newValue);
+                }
+            });
         }
 
         public void replaceAccess(final FieldValueConduit conduit)