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>()