This is an automated email from the ASF dual-hosted git repository. thiagohp pushed a commit to branch better-page-invalidation in repository https://gitbox.apache.org/repos/asf/tapestry-5.git
commit 5a330e6eda17a2c4e60785359d1f7e91ea4df557 Author: Thiago H. de Paula Figueiredo <thi...@arsmachina.com.br> AuthorDate: Sat Jun 10 11:57:27 2023 -0300 TAP5-2742: reenabling resource -> class tracking --- .../tapestry5/internal/transform/ImportWorker.java | 29 +++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) 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 a3801a6ea..e47553fbd 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 @@ -14,11 +14,13 @@ package org.apache.tapestry5.internal.transform; import org.apache.tapestry5.Asset; import org.apache.tapestry5.ComponentResources; +import org.apache.tapestry5.SymbolConstants; import org.apache.tapestry5.annotations.Import; import org.apache.tapestry5.annotations.SetupRender; import org.apache.tapestry5.func.F; import org.apache.tapestry5.func.Mapper; 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.*; @@ -44,6 +46,10 @@ public class ImportWorker implements ComponentClassTransformWorker2 private final SymbolSource symbolSource; private final AssetSource assetSource; + + private final ResourceChangeTracker resourceChangeTracker; + + private final boolean multipleClassLoaders; private final Worker<Asset> importLibrary = new Worker<Asset>() { @@ -69,21 +75,29 @@ public class ImportWorker implements ComponentClassTransformWorker2 } }; - public ImportWorker(JavaScriptSupport javascriptSupport, SymbolSource symbolSource, AssetSource assetSource) + public ImportWorker(JavaScriptSupport javascriptSupport, SymbolSource symbolSource, AssetSource assetSource, + ResourceChangeTracker resourceChangeTracker) { this.javascriptSupport = javascriptSupport; this.symbolSource = symbolSource; this.assetSource = assetSource; + this.resourceChangeTracker = resourceChangeTracker; + this.multipleClassLoaders = + !Boolean.valueOf(symbolSource.valueForSymbol(SymbolConstants.PRODUCTION_MODE)) && + Boolean.valueOf(symbolSource.valueForSymbol(SymbolConstants.MULTIPLE_CLASSLOADERS)); } public void transform(PlasticClass componentClass, TransformationSupport support, MutableComponentModel model) { + resourceChangeTracker.setCurrentClassName(model.getComponentClassName()); processClassAnnotationAtSetupRenderPhase(componentClass, model); for (PlasticMethod m : componentClass.getMethodsWithAnnotation(Import.class)) { decorateMethod(componentClass, model, m); } + + resourceChangeTracker.clearCurrentClassName(); } private void processClassAnnotationAtSetupRenderPhase(PlasticClass componentClass, MutableComponentModel model) @@ -112,8 +126,6 @@ public class ImportWorker implements ComponentClassTransformWorker2 { importStacks(method, annotation.stack()); - String libraryName = model.getLibraryName(); - importLibraries(componentClass, model, method, annotation.library()); importStylesheets(componentClass, model, method, annotation.stylesheet()); @@ -264,6 +276,7 @@ public class ImportWorker implements ComponentClassTransformWorker2 private void addMethodAssetOperationAdvice(PlasticMethod method, final FieldHandle access, final Worker<Asset> operation) { + final String className = method.getPlasticClass().getClassName(); method.addAdvice(new MethodAdvice() { public void advise(MethodInvocation invocation) @@ -272,7 +285,17 @@ public class ImportWorker implements ComponentClassTransformWorker2 Asset[] assets = (Asset[]) access.get(invocation.getInstance()); + if (multipleClassLoaders) + { + resourceChangeTracker.setCurrentClassName(className); + } + F.flow(assets).each(operation); + + if (multipleClassLoaders) + { + resourceChangeTracker.clearCurrentClassName(); + } } }); }