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/10/28 20:42:04 UTC

svn commit: r1190494 - /tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CommonResourcesInjectionProvider.java

Author: hlship
Date: Fri Oct 28 18:42:04 2011
New Revision: 1190494

URL: http://svn.apache.org/viewvc?rev=1190494&view=rev
Log:
Optimization: inject a ComputedValue, rather than use a full FieldConduit, when injecting common resources into a component

This is a bit more efficient, as fewer methods must be written, and fewer new fields created.

Modified:
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CommonResourcesInjectionProvider.java

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CommonResourcesInjectionProvider.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CommonResourcesInjectionProvider.java?rev=1190494&r1=1190493&r2=1190494&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CommonResourcesInjectionProvider.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CommonResourcesInjectionProvider.java Fri Oct 28 18:42:04 2011
@@ -20,6 +20,7 @@ import org.apache.tapestry5.ioc.Messages
 import org.apache.tapestry5.ioc.ObjectLocator;
 import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
 import org.apache.tapestry5.model.MutableComponentModel;
+import org.apache.tapestry5.plastic.ComputedValue;
 import org.apache.tapestry5.plastic.InstanceContext;
 import org.apache.tapestry5.plastic.PlasticField;
 import org.apache.tapestry5.services.pageload.ComponentResourceSelector;
@@ -34,27 +35,16 @@ import java.util.Map;
  */
 public class CommonResourcesInjectionProvider implements InjectionProvider2
 {
-    interface ResourceProvider<T>
+    abstract static class ResourceProvider<T> implements ComputedValue<T>
     {
-        T get(ComponentResources resources);
-    }
-
-    static class ResourceConduit extends ReadOnlyComponentFieldConduit
-    {
-        private final ResourceProvider<?> provider;
-
-        ResourceConduit(String className, String fieldName, ResourceProvider<?> provider)
-        {
-            super(className, fieldName);
-            this.provider = provider;
-        }
-
-        public Object get(Object instance, InstanceContext context)
+        public T get(InstanceContext context)
         {
             ComponentResources resources = context.get(ComponentResources.class);
 
-            return provider.get(resources);
+            return get(resources);
         }
+
+        abstract T get(ComponentResources resources);
     }
 
     private static ResourceProvider<ComponentResourceSelector> selectorProvider = new ResourceProvider<ComponentResourceSelector>()
@@ -118,14 +108,14 @@ public class CommonResourcesInjectionPro
 
     public boolean provideInjection(PlasticField field, ObjectLocator locator, MutableComponentModel componentModel)
     {
-        ResourceProvider provider = configuration.get(field.getTypeName());
+        final ResourceProvider provider = configuration.get(field.getTypeName());
 
         if (provider == null)
         {
             return false;
         }
 
-        field.setConduit(new ResourceConduit(field.getPlasticClass().getClassName(), field.getName(), provider));
+        field.injectComputed(provider);
 
         return true;
     }