Author: ivaynberg
Date: Mon Nov 15 00:43:16 2010
New Revision: 1035110

URL: http://svn.apache.org/viewvc?rev=1035110&view=rev
Log:
caching for isVisibleInHieararchy
Issue: WICKET-3166

Modified:
    wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java?rev=1035110&r1=1035109&r2=1035110&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java 
(original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java Mon Nov 
15 00:43:16 2010
@@ -430,6 +430,16 @@ public abstract class Component
        };
 
        /**
+        * Keeps metadata about the visibility state of the component
+        * 
+        * The states are: null - not calculated, true and false
+        */
+       private static final MetaDataKey<Boolean> 
VISIBLE_IN_HIERARCHY_CACHE_KEY = new MetaDataKey<Boolean>()
+       {
+               private static final long serialVersionUID = 1L;
+       };
+
+       /**
         * Keeps metadata about the enabled state of the component
         * 
         * The states are: null - not calculated, true and false
@@ -2138,12 +2148,21 @@ public abstract class Component
         */
        public final boolean isVisibleInHierarchy()
        {
-               Component parent = getParent();
-               if (parent != null && !parent.isVisibleInHierarchy())
+               Boolean state = getMetaData(VISIBLE_IN_HIERARCHY_CACHE_KEY);
+               if (state == null)
                {
-                       return false;
+                       Component parent = getParent();
+                       if (parent != null && !parent.isVisibleInHierarchy())
+                       {
+                               state = false;
+                       }
+                       else
+                       {
+                               state = determineVisibility();
+                       }
+                       setMetaData(VISIBLE_IN_HIERARCHY_CACHE_KEY, state);
                }
-               return determineVisibility();
+               return state;
        }
 
        /**


Reply via email to