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 2011/04/30 00:55:20 UTC

svn commit: r1097992 - in /tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal: services/ComponentInstantiatorSourceImpl.java transform/BridgeClassTransformation.java

Author: hlship
Date: Fri Apr 29 22:55:20 2011
New Revision: 1097992

URL: http://svn.apache.org/viewvc?rev=1097992&view=rev
Log:
TAP5-853: Reimplement getMethodIdentifier()

Modified:
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java
    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/services/ComponentInstantiatorSourceImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java?rev=1097992&r1=1097991&r2=1097992&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java Fri Apr 29 22:55:20 2011
@@ -37,10 +37,16 @@ import org.apache.tapestry5.ioc.services
 import org.apache.tapestry5.model.ComponentModel;
 import org.apache.tapestry5.model.MutableComponentModel;
 import org.apache.tapestry5.plastic.ClassInstantiator;
+import org.apache.tapestry5.plastic.InstructionBuilder;
+import org.apache.tapestry5.plastic.InstructionBuilderCallback;
+import org.apache.tapestry5.plastic.MethodDescription;
 import org.apache.tapestry5.plastic.PlasticClass;
+import org.apache.tapestry5.plastic.PlasticField;
 import org.apache.tapestry5.plastic.PlasticManager;
 import org.apache.tapestry5.plastic.PlasticManagerDelegate;
+import org.apache.tapestry5.plastic.PlasticUtils;
 import org.apache.tapestry5.runtime.Component;
+import org.apache.tapestry5.runtime.ComponentResourcesAware;
 import org.apache.tapestry5.services.InvalidationEventHub;
 import org.apache.tapestry5.services.UpdateListener;
 import org.apache.tapestry5.services.transform.ComponentClassTransformWorker2;
@@ -240,6 +246,11 @@ public final class ComponentInstantiator
 
         changeTracker.add(baseResource.toURL());
 
+        if (isRoot)
+        {
+            implementComponentInterface(plasticClass);
+        }
+
         MutableComponentModel model = new MutableComponentModelImpl(plasticClass.getClassName(), logger, baseResource,
                 parentModel);
 
@@ -267,6 +278,25 @@ public final class ComponentInstantiator
         classToModel.put(className, model);
     }
 
+    private MethodDescription GET_COMPONENT_RESOURCES = new MethodDescription(PlasticUtils.getMethod(
+            ComponentResourcesAware.class, "getComponentResources"));
+
+    private void implementComponentInterface(PlasticClass plasticClass)
+    {
+        plasticClass.introduceInterface(Component.class);
+
+        final PlasticField resourcesField = plasticClass.introduceField(InternalComponentResources.class,
+                "internalComponentResources").injectFromInstanceContext();
+
+        plasticClass.introduceMethod(GET_COMPONENT_RESOURCES, new InstructionBuilderCallback()
+        {
+            public void doBuild(InstructionBuilder builder)
+            {
+                builder.loadThis().getField(resourcesField).returnResult();
+            }
+        });
+    }
+
     public <T> ClassInstantiator<T> configureInstantiator(String className, ClassInstantiator<T> instantiator)
     {
         return instantiator;

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=1097992&r1=1097991&r2=1097992&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:20 2011
@@ -232,6 +232,8 @@ public class BridgeClassTransformation i
     {
         private final PlasticMethod plasticMethod;
 
+        private TransformMethodSignature signature;
+
         public BridgeTransformMethod(PlasticMethod plasticMethod)
         {
             this.plasticMethod = plasticMethod;
@@ -249,7 +251,12 @@ public class BridgeClassTransformation i
 
         public TransformMethodSignature getSignature()
         {
-            return toMethodSignature(plasticMethod.getDescription());
+            if (signature == null)
+            {
+                signature = toMethodSignature(plasticMethod.getDescription());
+            }
+
+            return signature;
         }
 
         public String getName()
@@ -416,7 +423,7 @@ public class BridgeClassTransformation i
 
         public String getMethodIdentifier()
         {
-            throw new IllegalStateException("getMethodIdentifer() not yet implemented");
+            return getSignature().getMediumDescription();
         }
 
         public boolean isOverride()
@@ -428,7 +435,6 @@ public class BridgeClassTransformation i
         {
             return plasticMethod.getParameters().get(index).getAnnotation(annotationType);
         }
-
     }
 
     private static final Mapper<PlasticMethod, TransformMethod> TO_TRANSFORM_METHOD = new Mapper<PlasticMethod, TransformMethod>()