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");