This is an automated email from the ASF dual-hosted git repository.

thiagohp pushed a commit to branch feature/es-module-support
in repository https://gitbox.apache.org/repos/asf/tapestry-5.git

commit c2835733f42a0017f3e4c3f17770192340d0a745
Author: Thiago H. de Paula Figueiredo <thi...@arsmachina.com.br>
AuthorDate: Tue Apr 1 17:02:27 2025 -0300

    TAP5-2803: adding @Import(esModule)
---
 5_10_RELEASE_NOTES.md                              |  1 +
 .../org/apache/tapestry5/annotations/Import.java   | 10 +++++
 .../tapestry5/internal/transform/ImportWorker.java | 48 +++++++++++++++++++---
 .../tapestry5/integration/app1/EsModuleTests.java  | 15 ++++++-
 .../integration/app1/pages/EsModuleDemo.java       |  3 +-
 5 files changed, 69 insertions(+), 8 deletions(-)

diff --git a/5_10_RELEASE_NOTES.md b/5_10_RELEASE_NOTES.md
index b99e05690..e7d1c36da 100644
--- a/5_10_RELEASE_NOTES.md
+++ b/5_10_RELEASE_NOTES.md
@@ -9,6 +9,7 @@ Scratch pad for changes destined for the 5.10.0 release notes 
page.
 
 * `JavaScriptSupport.importEsModule(String moduleName)`
 * 
`JavaScriptSupport.addEsModuleConfigurationCallback(EsModuleConfigurationCallback
 callback)`
+* `org.apache.tapestry5.annotations.Import.esModule()`
 
 # Added types
 
diff --git 
a/tapestry-core/src/main/java/org/apache/tapestry5/annotations/Import.java 
b/tapestry-core/src/main/java/org/apache/tapestry5/annotations/Import.java
index 2e50e3f7c..9eec6ac5d 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/annotations/Import.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/annotations/Import.java
@@ -82,4 +82,14 @@ public @interface Import
      * @since 5.4
      */
     String[] module() default {};
+    
+    /**
+     * Ids of ES modules to import. 
+     *
+     * @see org.apache.tapestry5.services.javascript.EsModuleManager
+     * @see JavaScriptSupport#importEsModule(String)
+     * @since 5.10.0
+     */
+    String[] esModule() default {};
+    
 }
diff --git 
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ImportWorker.java
 
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ImportWorker.java
index 36130ddaf..cc93a7b95 100644
--- 
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ImportWorker.java
+++ 
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ImportWorker.java
@@ -12,6 +12,11 @@
 
 package org.apache.tapestry5.internal.transform;
 
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
 import org.apache.tapestry5.Asset;
 import org.apache.tapestry5.ComponentResources;
 import org.apache.tapestry5.SymbolConstants;
@@ -23,8 +28,18 @@ import org.apache.tapestry5.func.Worker;
 import org.apache.tapestry5.internal.services.assets.ResourceChangeTracker;
 import org.apache.tapestry5.ioc.services.SymbolSource;
 import org.apache.tapestry5.model.MutableComponentModel;
-import org.apache.tapestry5.plastic.*;
+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.plastic.PlasticUtils;
 import org.apache.tapestry5.plastic.PlasticUtils.FieldInfo;
+import org.apache.tapestry5.plastic.PropertyAccessType;
+import org.apache.tapestry5.plastic.PropertyValueProvider;
 import org.apache.tapestry5.services.AssetSource;
 import org.apache.tapestry5.services.TransformConstants;
 import org.apache.tapestry5.services.javascript.Initialization;
@@ -32,11 +47,6 @@ import 
org.apache.tapestry5.services.javascript.JavaScriptSupport;
 import org.apache.tapestry5.services.transform.ComponentClassTransformWorker2;
 import org.apache.tapestry5.services.transform.TransformationSupport;
 
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
 /**
  * Implements the {@link Import} annotation, both at the class and at the 
method level.
  *
@@ -154,6 +164,8 @@ public class ImportWorker implements 
ComponentClassTransformWorker2
         importStylesheets(componentClass, model, method, 
annotation.stylesheet(), fieldInfos);
 
         importModules(method, annotation.module());
+        
+        importEsModules(method, annotation.esModule());
     }
 
     private void importStacks(PlasticMethod method, String[] stacks)
@@ -179,6 +191,14 @@ public class ImportWorker implements 
ComponentClassTransformWorker2
             }
         };
     }
+    
+    private void importEsModules(PlasticMethod method, String[] moduleIds)
+    {
+        if (moduleIds.length != 0)
+        {
+            method.addAdvice(createImportEsModulesAdvice(moduleIds));
+        }
+    }
 
     private void importModules(PlasticMethod method, String[] moduleNames)
     {
@@ -208,6 +228,22 @@ public class ImportWorker implements 
ComponentClassTransformWorker2
             }
         }
     }
+    
+    private MethodAdvice createImportEsModulesAdvice(final String[] moduleIds)
+    {
+        return new MethodAdvice()
+        {
+            public void advise(MethodInvocation invocation)
+            {
+                for (String moduleId : moduleIds)
+                {
+                    javascriptSupport.importEsModule(moduleId);
+                }
+
+                invocation.proceed();
+            }
+        };        
+    }
 
     private MethodAdvice createImportModulesAdvice(final String[] moduleNames)
     {
diff --git 
a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/EsModuleTests.java
 
b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/EsModuleTests.java
index 54be632ac..17d5c54f5 100644
--- 
a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/EsModuleTests.java
+++ 
b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/EsModuleTests.java
@@ -17,7 +17,9 @@ import static 
org.apache.tapestry5.integration.app1.services.AppModule.NON_OVERR
 import static 
org.apache.tapestry5.integration.app1.services.AppModule.OVERRIDDEN_ES_MODULE_ID;
 import static 
org.apache.tapestry5.integration.app1.services.AppModule.OVERRIDDEN_ES_MODULE_NEW_URL;
 
+import org.apache.tapestry5.annotations.Import;
 import org.apache.tapestry5.integration.app1.pages.EsModuleDemo;
+import org.apache.tapestry5.internal.transform.ImportWorker;
 import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.json.JSONObject;
 import org.apache.tapestry5.services.AssetSource;
@@ -117,10 +119,21 @@ public class EsModuleTests extends App1TestCase
         assertEquals(getText("head-message"), "ES module imported correctly 
(<head>)!");
         assertEquals(getText("body-top-message"), "ES module imported 
correctly (<body> top)!");
         assertEquals(getText("body-bottom-message"), "ES module imported 
correctly (<body> bottom)!");
-        assertEquals(getText("root-folder-message"), "ES module imported 
correctly from the root folder!");
         assertEquals(getText("outside-metainf-message"), "ES module correctly 
imported from outside /META-INF/assets/es-modules!");
 
     }
+    
+    /**
+     * Tests importing ES modules through <code>@Import(esModule = ...)</code>.
+     * @see ImportWorker
+     * @see Import#esModule()
+     */
+    @Test
+    public void at_import_esModule() throws InterruptedException
+    {
+        openLinks(PAGE_NAME);
+        assertEquals(getText("root-folder-message"), "ES module imported 
correctly from the root folder!");
+    }
 
     private void assertModulesDefinedByGlobalCallbacks(JSONObject importMap) {
         assertModuleUrl(NON_OVERRIDDEN_ES_MODULE_ID, 
NON_OVERRIDDEN_ES_MODULE_URL, importMap);
diff --git 
a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/EsModuleDemo.java
 
b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/EsModuleDemo.java
index e53bd964b..101cd71aa 100644
--- 
a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/EsModuleDemo.java
+++ 
b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/EsModuleDemo.java
@@ -12,6 +12,7 @@
 
 package org.apache.tapestry5.integration.app1.pages;
 
+import org.apache.tapestry5.annotations.Import;
 import org.apache.tapestry5.annotations.Property;
 import org.apache.tapestry5.annotations.SetupRender;
 import org.apache.tapestry5.integration.app1.services.AppModule;
@@ -20,6 +21,7 @@ import 
org.apache.tapestry5.services.javascript.EsModuleConfigurationCallback;
 import org.apache.tapestry5.services.javascript.ImportPlacement;
 import org.apache.tapestry5.services.javascript.JavaScriptSupport;
 
+@Import(esModule = {"root-folder"})
 public class EsModuleDemo
 {
     public static final String REQUEST_OVERRIDEN_MODULE_URL = 
"/overridenAgainURL";
@@ -47,7 +49,6 @@ public class EsModuleDemo
             .placement(ImportPlacement.BODY_TOP);
         javaScriptSupport.importEsModule("placement/head")
             .placement(ImportPlacement.HEAD);
-        javaScriptSupport.importEsModule("root-folder");
         javaScriptSupport.importEsModule("outside-metainf");        
         javaScriptSupport.importEsModule("show-import-map");
 

Reply via email to