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

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


The following commit(s) were added to refs/heads/master by this push:
     new 358d14d37 TAP5-2762: symbol for path to the component dependencies file
358d14d37 is described below

commit 358d14d379cf37defcb74f8554404cbf00e35827
Author: Thiago H. de Paula Figueiredo <[email protected]>
AuthorDate: Sat Sep 9 17:29:56 2023 -0300

    TAP5-2762: symbol for path to the component dependencies file
---
 .../java/org/apache/tapestry5/SymbolConstants.java | 19 +++++
 .../tapestry5/corelib/pages/PageCatalog.java       |  7 +-
 .../services/ComponentDependencyRegistry.java      |  2 +-
 .../services/ComponentDependencyRegistryImpl.java  | 89 +++++++++++++---------
 .../services/ComponentInstantiatorSourceImpl.java  |  2 +-
 .../apache/tapestry5/modules/PageLoadModule.java   | 41 +++++++++-
 .../apache/tapestry5/modules/TapestryModule.java   | 26 -------
 .../apache/tapestry5/corelib/pages/PageCatalog.tml | 44 ++++++-----
 .../integration/app1/components/Border.java        | 11 +++
 .../ComponentDependencyRegistryImplTest.java       |  2 +-
 .../integration/app1/components/Border.tml         |  5 ++
 11 files changed, 164 insertions(+), 84 deletions(-)

diff --git 
a/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java 
b/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java
index ca3b542f8..07e4d28de 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java
@@ -26,6 +26,7 @@ import org.apache.tapestry5.http.services.CorsHandler;
 import org.apache.tapestry5.http.services.CorsHandlerHelper;
 import org.apache.tapestry5.http.services.CorsHttpServletRequestFilter;
 import org.apache.tapestry5.internal.services.AssetDispatcher;
+import org.apache.tapestry5.internal.services.ComponentDependencyRegistry;
 import 
org.apache.tapestry5.internal.services.rest.DefaultOpenApiDescriptionGenerator;
 import org.apache.tapestry5.modules.NoBootstrapModule;
 import org.apache.tapestry5.services.Html5Support;
@@ -791,4 +792,22 @@ public class SymbolConstants
      */
     public static final String MULTIPLE_CLASSLOADERS = 
"tapestry.multiple-classloaders";
 
+    /**
+     * <p>
+     * Defines what file should be used to store and read component dependency 
information.
+     * It can be either an absolute path or a path relative to the current 
folder where
+     * the JVM is running.
+     * </p>
+     * <p>
+     * This symbol is ignored when in production mode.
+     * </p>
+     * <p>
+     * Default value is <code>tapestryComponentDependencies.json</code>
+     * ({@linkplain ComponentDependencyRegistry#FILENAME}).
+     * </p>
+     * @see ComponentDependencyRegistry
+     * @since 5.8.4
+     */
+    public static final String COMPONENT_DEPENDENCY_FILE = 
"tapestry.component-dependency-file";
+
 }
diff --git 
a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/PageCatalog.java
 
b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/PageCatalog.java
index a8472be8a..974a4a9e4 100644
--- 
a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/PageCatalog.java
+++ 
b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/PageCatalog.java
@@ -14,6 +14,7 @@
 
 package org.apache.tapestry5.corelib.pages;
 
+import java.io.File;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -86,6 +87,10 @@ public class PageCatalog
     @Symbol(SymbolConstants.MULTIPLE_CLASSLOADERS)
     private boolean multipleClassLoaders;
 
+    @Inject
+    @Symbol(SymbolConstants.COMPONENT_DEPENDENCY_FILE)
+    private String componentDependencyFile;
+
     @Inject
     private PageSource pageSource;
 
@@ -357,7 +362,7 @@ public class PageCatalog
         
         alertManager.warn(String.format(
                 "Component dependency information written to %s.", 
-                ComponentDependencyRegistry.FILENAME));
+                new File(componentDependencyFile).getAbsolutePath()));
         
         return pagesZone.getBody();
         
diff --git 
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentDependencyRegistry.java
 
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentDependencyRegistry.java
index 1613095c2..ad79630f4 100644
--- 
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentDependencyRegistry.java
+++ 
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentDependencyRegistry.java
@@ -58,7 +58,7 @@ public interface ComponentDependencyRegistry {
     }
 
     /**
-     * Name of the file where the dependency information is stored between 
webapp runs.
+     * Default file where the dependency information is stored between webapp 
runs.
      */
     String FILENAME = "tapestryComponentDependencies.json";
 
diff --git 
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentDependencyRegistryImpl.java
 
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentDependencyRegistryImpl.java
index d6d5d99f3..7f794f6ea 100644
--- 
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentDependencyRegistryImpl.java
+++ 
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentDependencyRegistryImpl.java
@@ -36,6 +36,7 @@ import java.util.function.Consumer;
 import java.util.stream.Collectors;
 
 import org.apache.tapestry5.ComponentResources;
+import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.annotations.InjectComponent;
 import org.apache.tapestry5.annotations.InjectPage;
 import org.apache.tapestry5.annotations.Mixin;
@@ -50,6 +51,7 @@ import 
org.apache.tapestry5.internal.parser.StartComponentToken;
 import org.apache.tapestry5.internal.parser.TemplateToken;
 import org.apache.tapestry5.internal.structure.ComponentPageElement;
 import org.apache.tapestry5.ioc.Orderable;
+import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.apache.tapestry5.ioc.internal.util.ClasspathResource;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
 import org.apache.tapestry5.ioc.services.PerthreadManager;
@@ -66,7 +68,9 @@ import org.apache.tapestry5.services.ComponentClassResolver;
 import org.apache.tapestry5.services.pageload.PageClassLoaderContextManager;
 import org.apache.tapestry5.services.templates.ComponentTemplateLocator;
 import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
+@SuppressWarnings("deprecation")
 public class ComponentDependencyRegistryImpl implements 
ComponentDependencyRegistry 
 {
     
@@ -96,7 +100,6 @@ public class ComponentDependencyRegistryImpl implements 
ComponentDependencyRegis
     
     final private Map<String, Boolean> isPageCache = new WeakHashMap<>();
     
-    @SuppressWarnings("deprecation")
     final private ComponentTemplateLocator componentTemplateLocator;
     
     final private boolean storedDependencyInformationPresent;
@@ -106,7 +109,9 @@ public class ComponentDependencyRegistryImpl implements 
ComponentDependencyRegis
             final PlasticManager plasticManager,
             final ComponentClassResolver componentClassResolver,
             final TemplateParser templateParser,
-            final ComponentTemplateLocator componentTemplateLocator)
+            final ComponentTemplateLocator componentTemplateLocator,
+            final @Symbol(SymbolConstants.COMPONENT_DEPENDENCY_FILE) String 
componentDependencyFile,
+            final @Symbol(SymbolConstants.PRODUCTION_MODE) boolean 
productionMode)
     {
         this.pageClassLoaderContextManager = pageClassLoaderContextManager;
         map = new HashMap<>();
@@ -116,36 +121,52 @@ public class ComponentDependencyRegistryImpl implements 
ComponentDependencyRegis
         this.templateParser = templateParser;
         this.componentTemplateLocator = componentTemplateLocator;
         
-        storedDependencies = new File(FILENAME);
-        if (storedDependencies.exists())
+        if (!productionMode)
         {
-            try (FileReader fileReader = new FileReader(storedDependencies);
-                    BufferedReader reader = new BufferedReader(fileReader))
+        
+            Logger logger = 
LoggerFactory.getLogger(ComponentDependencyRegistry.class);
+            
+            storedDependencies = new File(componentDependencyFile);
+            final boolean fileExists = storedDependencies.exists();
+            
+            logger.info("Component dependencies file: {} Found? {}", 
+                    storedDependencies.getAbsolutePath(), fileExists);
+            
+            if (fileExists)
             {
-                StringBuilder builder = new StringBuilder();
-                String line = reader.readLine();
-                while (line != null)
+                try (FileReader fileReader = new 
FileReader(storedDependencies);
+                        BufferedReader reader = new BufferedReader(fileReader))
                 {
-                    builder.append(line);
-                    line = reader.readLine();
-                }
-                JSONArray jsonArray = new JSONArray(builder.toString());
-                for (int i = 0; i < jsonArray.size(); i++)
+                    StringBuilder builder = new StringBuilder();
+                    String line = reader.readLine();
+                    while (line != null)
+                    {
+                        builder.append(line);
+                        line = reader.readLine();
+                    }
+                    JSONArray jsonArray = new JSONArray(builder.toString());
+                    for (int i = 0; i < jsonArray.size(); i++)
+                    {
+                        final JSONObject jsonObject = 
jsonArray.getJSONObject(i);
+                        final String className = jsonObject.getString("class");
+                        final DependencyType dependencyType = 
DependencyType.valueOf(jsonObject.getString("type"));
+                        final String dependency = 
jsonObject.getString("dependency");
+                        add(className, dependency, dependencyType);
+                        alreadyProcessed.add(dependency);
+                        alreadyProcessed.add(className);
+                    }
+                } catch (IOException e) 
                 {
-                    final JSONObject jsonObject = jsonArray.getJSONObject(i);
-                    final String className = jsonObject.getString("class");
-                    final DependencyType dependencyType = 
DependencyType.valueOf(jsonObject.getString("type"));
-                    final String dependency = 
jsonObject.getString("dependency");
-                    add(className, dependency, dependencyType);
-                    alreadyProcessed.add(dependency);
-                    alreadyProcessed.add(className);
+                    throw new TapestryException("Exception trying to read " + 
storedDependencies.getAbsolutePath(), e);
                 }
-            } catch (IOException e) 
-            {
-                throw new TapestryException("Exception trying to read " + 
FILENAME, e);
+                
             }
             
         }
+        else
+        {
+            storedDependencies = null;
+        }
         
         storedDependencyInformationPresent = !map.isEmpty();
         
@@ -207,7 +228,7 @@ public class ComponentDependencyRegistryImpl implements 
ComponentDependencyRegis
         }
 
         // Superclass
-        Class superclass = component.getSuperclass();
+        Class<?> superclass = component.getSuperclass();
         if (isTransformed(superclass))
         {
             processClass.accept(superclass);
@@ -236,7 +257,6 @@ public class ComponentDependencyRegistryImpl implements 
ComponentDependencyRegis
      * @param component
      * @param processClassName 
      */
-    @SuppressWarnings("deprecation")
     private void registerTemplate(Class<?> component, Consumer<String> 
processClassName) 
     {
         // TODO: implement caching of template dependency information, probably
@@ -273,11 +293,6 @@ public class ComponentDependencyRegistryImpl implements 
ComponentDependencyRegis
         }
     }
     
-    private boolean isNotPage(final String className) 
-    {
-        return !isPage(className);
-    }
-
     private boolean isPage(final String className) 
     {
         Boolean result = isPageCache.get(className);
@@ -342,7 +357,7 @@ public class ComponentDependencyRegistryImpl implements 
ComponentDependencyRegis
             MixinClasses mixinClasses = 
field.getAnnotation(MixinClasses.class);
             if (mixinClasses != null)
             {
-                for (Class dependency : mixinClasses.value()) 
+                for (Class<?> dependency : mixinClasses.value()) 
                 {
                     add(field.getDeclaringClass(), dependency, 
DependencyType.USAGE);
                     processClass.accept(dependency);
@@ -657,8 +672,13 @@ public class ComponentDependencyRegistryImpl implements 
ComponentDependencyRegis
             }
             catch (IOException e) 
             {
-                throw new TapestryException("Exception trying to read " + 
FILENAME, e);
+                throw new TapestryException("Exception trying to write " + 
storedDependencies.getAbsolutePath(), e);
             }
+            
+            Logger logger = 
LoggerFactory.getLogger(ComponentDependencyRegistry.class);
+            
+            logger.info("Component dependencies written to {}", 
+                    storedDependencies.getAbsolutePath());
         } 
     }
 
@@ -683,7 +703,7 @@ public class ComponentDependencyRegistryImpl implements 
ComponentDependencyRegis
                 .collect(Collectors.toSet());
     }
     
-    private boolean isTransformed(Class clasz)
+    private boolean isTransformed(Class<?> clasz)
     {
         return plasticManager.shouldInterceptClassLoading(clasz.getName());
     }
@@ -843,6 +863,7 @@ public class ComponentDependencyRegistryImpl implements 
ComponentDependencyRegis
             return null;
         }
 
+        @SuppressWarnings("rawtypes")
         @Override
         public Set<Class> getHandledRenderPhases() 
         {
diff --git 
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java
 
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java
index a0ae6d2ea..1faeecf23 100644
--- 
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java
+++ 
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java
@@ -321,7 +321,7 @@ public final class ComponentInstantiatorSourceImpl 
implements ComponentInstantia
         
         if (rootPageClassloaderContext == null)
         {
-            logger.info("Initializing page pool");
+            logger.info("Initializing page pool. Multiple classloaders " + 
(!productionMode && multipleClassLoaders ? "enabled" : "disabled") + ".");
             
             pageClassLoaderContextManager.clear();
             
diff --git 
a/tapestry-core/src/main/java/org/apache/tapestry5/modules/PageLoadModule.java 
b/tapestry-core/src/main/java/org/apache/tapestry5/modules/PageLoadModule.java
index 8e80d0bd1..5ca2f3715 100644
--- 
a/tapestry-core/src/main/java/org/apache/tapestry5/modules/PageLoadModule.java
+++ 
b/tapestry-core/src/main/java/org/apache/tapestry5/modules/PageLoadModule.java
@@ -22,14 +22,20 @@ import 
org.apache.tapestry5.internal.pageload.DefaultComponentRequestSelectorAna
 import org.apache.tapestry5.internal.pageload.DefaultComponentResourceLocator;
 import org.apache.tapestry5.internal.pageload.PagePreloaderImpl;
 import org.apache.tapestry5.internal.services.ComponentDependencyRegistry;
+import org.apache.tapestry5.internal.services.ComponentDependencyRegistryImpl;
+import org.apache.tapestry5.internal.services.ComponentInstantiatorSource;
 import org.apache.tapestry5.internal.services.ComponentTemplateSource;
 import org.apache.tapestry5.internal.services.ComponentTemplateSourceImpl;
+import 
org.apache.tapestry5.internal.services.InternalComponentInvalidationEventHub;
+import org.apache.tapestry5.internal.services.TemplateParser;
+import org.apache.tapestry5.internal.services.assets.ResourceChangeTracker;
 import org.apache.tapestry5.ioc.ServiceBinder;
 import org.apache.tapestry5.ioc.annotations.Marker;
 import org.apache.tapestry5.ioc.annotations.Startup;
 import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.apache.tapestry5.ioc.services.ChainBuilder;
-import org.apache.tapestry5.services.ComponentLibraryInfoSource;
+import org.apache.tapestry5.ioc.services.PerthreadManager;
+import org.apache.tapestry5.services.ComponentClassResolver;
 import org.apache.tapestry5.services.Core;
 import org.apache.tapestry5.services.pageload.ComponentRequestSelectorAnalyzer;
 import org.apache.tapestry5.services.pageload.ComponentResourceLocator;
@@ -39,10 +45,12 @@ import 
org.apache.tapestry5.services.pageload.PageClassLoaderContextManagerImpl;
 import org.apache.tapestry5.services.pageload.PagePreloader;
 import org.apache.tapestry5.services.pageload.PreloaderMode;
 import org.apache.tapestry5.services.pageload.ReferenceType;
+import org.apache.tapestry5.services.templates.ComponentTemplateLocator;
 
 /**
  * @since 5.3
  */
+@SuppressWarnings("deprecation")
 @Marker(Core.class)
 public class PageLoadModule
 {
@@ -53,6 +61,7 @@ public class PageLoadModule
     public static void contributeFactoryDefaults(MappedConfiguration<String, 
Object> configuration)
     {
         configuration.add(SymbolConstants.MULTIPLE_CLASSLOADERS, false);
+        configuration.add(SymbolConstants.COMPONENT_DEPENDENCY_FILE, 
ComponentDependencyRegistry.FILENAME);
     }
     
     public static void bind(ServiceBinder binder)
@@ -109,5 +118,35 @@ public class PageLoadModule
     {
         configuration.add("Fallback", p -> ReferenceType.SOFT, "after:*");
     }
+    
+    public static ComponentDependencyRegistry buildComponentDependencyRegistry(
+            InternalComponentInvalidationEventHub 
internalComponentInvalidationEventHub,
+            ResourceChangeTracker resourceChangeTracker,
+            ComponentTemplateSource componentTemplateSource,
+            PageClassLoaderContextManager pageClassLoaderContextManager,
+            ComponentInstantiatorSource componentInstantiatorSource,
+            ComponentClassResolver componentClassResolver,
+            TemplateParser templateParser,
+            ComponentTemplateLocator componentTemplateLocator,
+            PerthreadManager perthreadManager,
+            @Symbol(SymbolConstants.COMPONENT_DEPENDENCY_FILE) String 
componentDependencyFile,
+            @Symbol(SymbolConstants.PRODUCTION_MODE) boolean productionMode)
+    {
+        ComponentDependencyRegistryImpl componentDependencyRegistry = 
+                new ComponentDependencyRegistryImpl(
+                        pageClassLoaderContextManager,
+                        
componentInstantiatorSource.getProxyFactory().getPlasticManager(),
+                        componentClassResolver,
+                        templateParser,
+                        componentTemplateLocator,
+                        componentDependencyFile,
+                        productionMode);
+        
componentDependencyRegistry.listen(internalComponentInvalidationEventHub);
+        componentDependencyRegistry.listen(resourceChangeTracker);
+        
componentDependencyRegistry.listen(componentTemplateSource.getInvalidationEventHub());
+        // TODO: remove
+        componentDependencyRegistry.setupThreadCleanup(perthreadManager);
+        return componentDependencyRegistry;
+    }
 
 }
diff --git 
a/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java 
b/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java
index 6dd4039ac..57edc6bd4 100644
--- 
a/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java
+++ 
b/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java
@@ -2785,32 +2785,6 @@ public final class TapestryModule
         configuration.add(appRootPackage + ".rest.entities");
     }
     
-    public static ComponentDependencyRegistry buildComponentDependencyRegistry(
-            InternalComponentInvalidationEventHub 
internalComponentInvalidationEventHub,
-            ResourceChangeTracker resourceChangeTracker,
-            ComponentTemplateSource componentTemplateSource,
-            PageClassLoaderContextManager pageClassLoaderContextManager,
-            ComponentInstantiatorSource componentInstantiatorSource,
-            ComponentClassResolver componentClassResolver,
-            TemplateParser templateParser,
-            ComponentTemplateLocator componentTemplateLocator,
-            PerthreadManager perthreadManager)
-    {
-        ComponentDependencyRegistryImpl componentDependencyRegistry = 
-                new ComponentDependencyRegistryImpl(
-                        pageClassLoaderContextManager,
-                        
componentInstantiatorSource.getProxyFactory().getPlasticManager(),
-                        componentClassResolver,
-                        templateParser,
-                        componentTemplateLocator);
-        
componentDependencyRegistry.listen(internalComponentInvalidationEventHub);
-        componentDependencyRegistry.listen(resourceChangeTracker);
-        
componentDependencyRegistry.listen(componentTemplateSource.getInvalidationEventHub());
-        // TODO: remove
-        componentDependencyRegistry.setupThreadCleanup(perthreadManager);
-        return componentDependencyRegistry;
-    }
-    
     private static final class TapestryCoreComponentLibraryInfoSource 
implements
             ComponentLibraryInfoSource
     {
diff --git 
a/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/pages/PageCatalog.tml
 
b/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/pages/PageCatalog.tml
index 0e8242331..bdac0f8b1 100644
--- 
a/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/pages/PageCatalog.tml
+++ 
b/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/pages/PageCatalog.tml
@@ -43,24 +43,28 @@
             </t:actionlink>
         </t:if>
         <t:actionlink t:id="runGC" zone="pages" class="btn btn-default">Run 
the GC</t:actionlink>
-        <t:actionlink t:id="storeDependencyInformation" zone="pages" 
class="btn btn-warning">Store dependency information</t:actionlink>
-        <t:if test="multipleClassLoaders">
-               <t:actionlink t:id="preloadPageClassLoaderContexts" class="btn 
btn-default">Preload dependency information and page classloader 
contexts</t:actionlink>
+        <t:if test="!productionMode">
+               <t:actionlink t:id="storeDependencyInformation" zone="pages" 
class="btn btn-warning">Store dependency information</t:actionlink>
+               <t:if test="multipleClassLoaders">
+                       <t:actionlink t:id="preloadPageClassLoaderContexts" 
class="btn btn-default">Preload dependency information and page classloader 
contexts</t:actionlink>
+                       </t:if>
                </t:if>
     </div>
     
     
     <t:zone t:id="pageStructureZone">
-           <div class="panel panel-default vert-offset" t:type="If" 
t:test="selectedPage">
-               <div class="panel-heading">Component dependency information for 
${selectedPage.name} (just direct dependencies)</div>
-               <div class="panel-body">
-                       <ul>
-                               <li t:type="Loop" t:value="dependency" 
t:source="dependencies">
-                                       ${displayLogicalName} (${dependency})
-                               </li>
-                       </ul>
-               </div>
-           </div>
+           <t:if t:test="!productionMode">
+                   <div class="panel panel-default vert-offset" t:type="If" 
t:test="selectedPage">
+                       <div class="panel-heading">Component dependency 
information for ${selectedPage.name} (just direct dependencies)</div>
+                       <div class="panel-body">
+                               <ul>
+                                       <li t:type="Loop" t:value="dependency" 
t:source="dependencies">
+                                               ${displayLogicalName} 
(${dependency})
+                                       </li>
+                               </ul>
+                       </div>
+                   </div>
+           </t:if>
            <div class="panel panel-default vert-offset" t:type="If" 
t:test="selectedPage">
                <div class="panel-heading">${selectedPage.name}'s component 
tree</div>
                <div class="panel-body">
@@ -69,12 +73,14 @@
                        </ul>
                </div>
            </div>
-           <div class="panel panel-default vert-offset" t:type="If" 
t:test="selectedPage">
-               <div class="panel-heading">${selectedPage.name}'s dependency 
tree</div>
-               <div class="panel-body">
-                       <t:graphviz value="graphvizValue"/>
-               </div>
-           </div>
+           <t:if t:test="!productionMode">
+                   <div class="panel panel-default vert-offset" t:type="If" 
t:test="selectedPage">
+                       <div class="panel-heading">${selectedPage.name}'s 
dependency tree</div>
+                       <div class="panel-body">
+                               <t:graphviz value="graphvizValue"/>
+                       </div>
+                   </div>
+           </t:if>
        </t:zone>          
 
     <div class="panel panel-default vert-offset">
diff --git 
a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/components/Border.java
 
b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/components/Border.java
index 78430dd88..b5a6d8e13 100644
--- 
a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/components/Border.java
+++ 
b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/components/Border.java
@@ -56,4 +56,15 @@ public class Border
 
         return true;
     }
+    
+    public String getJvm() 
+    {
+        String version = System.getProperty("java.vendor.version");
+        if (version == null)
+        {
+            version = System.getProperty("java.vm.version");
+        }
+        return version + " from " + System.getProperty("java.vendor");
+    }
+    
 }
diff --git 
a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentDependencyRegistryImplTest.java
 
b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentDependencyRegistryImplTest.java
index 5ee5af228..579ac5010 100644
--- 
a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentDependencyRegistryImplTest.java
+++ 
b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentDependencyRegistryImplTest.java
@@ -173,7 +173,7 @@ public class ComponentDependencyRegistryImplTest
         
         componentDependencyRegistry = new ComponentDependencyRegistryImpl(
                 pageClassLoaderContextManager, plasticManager, resolver, 
templateParser, 
-                componentTemplateLocator);
+                componentTemplateLocator, 
ComponentDependencyRegistry.FILENAME, false);
         EasyMock.replay(pageClassLoaderContextManager, plasticManager, 
resolver);
     }
 
diff --git 
a/tapestry-core/src/test/resources/org/apache/tapestry5/integration/app1/components/Border.tml
 
b/tapestry-core/src/test/resources/org/apache/tapestry5/integration/app1/components/Border.tml
index 908c91961..93bb9820a 100644
--- 
a/tapestry-core/src/test/resources/org/apache/tapestry5/integration/app1/components/Border.tml
+++ 
b/tapestry-core/src/test/resources/org/apache/tapestry5/integration/app1/components/Border.tml
@@ -50,6 +50,11 @@
         <t:body/>
 
         <hr/>
+        
+        <h2>JVM</h2>
+        <p>
+                       ${jvm}
+               </p>
 
         <h2>Request</h2>
 

Reply via email to