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/06/02 00:56:16 UTC

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

Author: hlship
Date: Wed Jun  1 22:56:16 2011
New Revision: 1130338

URL: http://svn.apache.org/viewvc?rev=1130338&view=rev
Log:
TAP5-1508: Optimize the @Import worker to initialize assets in the constructor, not on page load

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

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ImportWorker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ImportWorker.java?rev=1130338&r1=1130337&r2=1130338&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ImportWorker.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ImportWorker.java Wed Jun  1 22:56:16 2011
@@ -21,16 +21,18 @@ import org.apache.tapestry5.ComponentRes
 import org.apache.tapestry5.annotations.Import;
 import org.apache.tapestry5.annotations.SetupRender;
 import org.apache.tapestry5.func.F;
-import org.apache.tapestry5.func.Flow;
 import org.apache.tapestry5.func.Mapper;
 import org.apache.tapestry5.func.Worker;
 import org.apache.tapestry5.ioc.Resource;
 import org.apache.tapestry5.ioc.services.SymbolSource;
 import org.apache.tapestry5.model.MutableComponentModel;
+import org.apache.tapestry5.plastic.ComputedValue;
 import org.apache.tapestry5.plastic.FieldHandle;
+import org.apache.tapestry5.plastic.InstanceContext;
 import org.apache.tapestry5.plastic.MethodAdvice;
 import org.apache.tapestry5.plastic.MethodInvocation;
 import org.apache.tapestry5.plastic.PlasticClass;
+import org.apache.tapestry5.plastic.PlasticField;
 import org.apache.tapestry5.plastic.PlasticMethod;
 import org.apache.tapestry5.services.AssetSource;
 import org.apache.tapestry5.services.TransformConstants;
@@ -157,12 +159,12 @@ public class ImportWorker implements Com
 
         String[] expandedPaths = expandPaths(paths);
 
-        FieldHandle assetListHandle = componentClass.introduceField(Asset[].class,
-                "importedAssets_" + method.getDescription().methodName).getHandle();
+        PlasticField assetListField = componentClass.introduceField(Asset[].class,
+                "importedAssets_" + method.getDescription().methodName);
 
-        storeLocalizedAssetsAtPageLoad(componentClass, model.getBaseResource(), expandedPaths, assetListHandle);
+        initializeAssetsFromPaths(componentClass, model.getBaseResource(), expandedPaths, assetListField);
 
-        addMethodAssetOperationAdvice(method, assetListHandle, operation);
+        addMethodAssetOperationAdvice(method, assetListField.getHandle(), operation);
     }
 
     private String[] expandPaths(String[] paths)
@@ -175,24 +177,18 @@ public class ImportWorker implements Com
         return result;
     }
 
-    private void storeLocalizedAssetsAtPageLoad(PlasticClass componentClass, final Resource baseResource,
-            final String[] expandedPaths, final FieldHandle access)
+    private void initializeAssetsFromPaths(PlasticClass componentClass, final Resource baseResource,
+            final String[] expandedPaths, final PlasticField assetsField)
     {
-        MethodAdvice advice = new MethodAdvice()
+        assetsField.injectComputed(new ComputedValue<Asset[]>()
         {
-            public void advise(MethodInvocation invocation)
+            public Asset[] get(InstanceContext context)
             {
-                invocation.proceed();
-
-                ComponentResources resources = invocation.getInstanceContext().get(ComponentResources.class);
-
-                Asset[] assets = convertPathsToAssetArray(baseResource, resources.getLocale(), expandedPaths);
+                ComponentResources resources = context.get(ComponentResources.class);
 
-                access.set(invocation.getInstance(), assets);
+                return convertPathsToAssetArray(baseResource, resources.getLocale(), expandedPaths);
             }
-        };
-
-        componentClass.introduceMethod(TransformConstants.CONTAINING_PAGE_DID_LOAD_DESCRIPTION).addAdvice(advice);
+        });
     }
 
     private Asset[] convertPathsToAssetArray(final Resource baseResource, final Locale locale, String[] assetPaths)