Author: ivaynberg
Date: Sat Aug  7 00:49:31 2010
New Revision: 983153

URL: http://svn.apache.org/viewvc?rev=983153&view=rev
Log:
WICKET-2969
Issue: WICKET-2969

Modified:
    wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/MarkupContainer.java
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/ComponentInitializationTest.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=983153&r1=983152&r2=983153&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 Sat Aug  
7 00:49:31 2010
@@ -375,8 +375,8 @@ public abstract class Component implemen
        /** True when a component is being removed from the hierarchy */
        protected static final int FLAG_REMOVING_FROM_HIERARCHY = 0x200000;
 
-       private static final int FLAG_BEFORE_RENDERING_SUPER_CALL_VERIFIED = 
0x1000000;
-
+       private static final int FLAG_BEFORE_RENDER_SUPER_CALL_VERIFIED = 
0x1000000;
+       private static final int FLAG_INITIALIZE_SUPER_CALL_VERIFIED = 
0x10000000;
        /**
         * Flag that makes we are in before-render callback phase Set after 
component.onBeforeRender is
         * invoked (right before invoking beforeRender on children)
@@ -948,6 +948,7 @@ public abstract class Component implemen
         */
        protected void onInitialize()
        {
+               setFlag(FLAG_INITIALIZE_SUPER_CALL_VERIFIED, true);
        }
 
        /**
@@ -965,18 +966,27 @@ public abstract class Component implemen
         */
        void initialize()
        {
-               doInitialize();
+               fireInitialize();
        }
 
        /**
         * Used to call {...@link #onInitialize()}
         */
-       final void doInitialize()
+       final void fireInitialize()
        {
                if (!getFlag(FLAG_INITIALIZED))
                {
                        setFlag(FLAG_INITIALIZED, true);
+                       setFlag(FLAG_INITIALIZE_SUPER_CALL_VERIFIED, false);
                        onInitialize();
+                       if (!getFlag(FLAG_INITIALIZE_SUPER_CALL_VERIFIED))
+                       {
+                               throw new 
IllegalStateException(Component.class.getName() +
+                                       " has not been properly initialized. 
Something in the hierarchy of " +
+                                       getClass().getName() +
+                                       " has not called super.onInitializer() 
in the override of onInitialize() method");
+                       }
+                       setFlag(FLAG_INITIALIZE_SUPER_CALL_VERIFIED, false);
                }
        }
 
@@ -1100,7 +1110,7 @@ public abstract class Component implemen
                if ((determineVisibility() || callOnBeforeRenderIfNotVisible()) 
&&
                        !getFlag(FLAG_RENDERING) && 
!getFlag(FLAG_PREPARED_FOR_RENDER))
                {
-                       setFlag(FLAG_BEFORE_RENDERING_SUPER_CALL_VERIFIED, 
false);
+                       setFlag(FLAG_BEFORE_RENDER_SUPER_CALL_VERIFIED, false);
 
                        
getApplication().notifyPreComponentOnBeforeRenderListeners(this);
 
@@ -1111,7 +1121,7 @@ public abstract class Component implemen
                        onBeforeRender();
                        
getApplication().notifyPostComponentOnBeforeRenderListeners(this);
 
-                       if (!getFlag(FLAG_BEFORE_RENDERING_SUPER_CALL_VERIFIED))
+                       if (!getFlag(FLAG_BEFORE_RENDER_SUPER_CALL_VERIFIED))
                        {
                                throw new 
IllegalStateException(Component.class.getName() +
                                        " has not been properly rendered. 
Something in the hierarchy of " +
@@ -3878,7 +3888,7 @@ public abstract class Component implemen
        {
                setFlag(FLAG_PREPARED_FOR_RENDER, true);
                onBeforeRenderChildren();
-               setFlag(FLAG_BEFORE_RENDERING_SUPER_CALL_VERIFIED, true);
+               setFlag(FLAG_BEFORE_RENDER_SUPER_CALL_VERIFIED, true);
        }
 
        /**

Modified: 
wicket/trunk/wicket/src/main/java/org/apache/wicket/MarkupContainer.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/MarkupContainer.java?rev=983153&r1=983152&r2=983153&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/MarkupContainer.java 
(original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/MarkupContainer.java 
Sat Aug  7 00:49:31 2010
@@ -987,20 +987,20 @@ public abstract class MarkupContainer ex
        }
 
        /**
-        * Overrides {...@link Component#initialize()} to call {...@link 
Component#doInitialize()} for itself
+        * Overrides {...@link Component#initialize()} to call {...@link 
Component#fireInitialize()} for itself
         * and for all its children.
         * 
-        * @see org.apache.wicket.Component#doInitialize()
+        * @see org.apache.wicket.Component#fireInitialize()
         */
        @Override
        final void initialize()
        {
-               super.doInitialize();
+               super.fireInitialize();
                visitChildren(new IVisitor<Component, Void>()
                {
                        public void component(final Component component, final 
IVisit<Void> visit)
                        {
-                               component.doInitialize();
+                               component.fireInitialize();
                        }
                });
        }

Modified: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/ComponentInitializationTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/ComponentInitializationTest.java?rev=983153&r1=983152&r2=983153&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/ComponentInitializationTest.java
 (original)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/ComponentInitializationTest.java
 Sat Aug  7 00:49:31 2010
@@ -17,6 +17,7 @@
 package org.apache.wicket;
 
 import org.apache.wicket.markup.IMarkupResourceStreamProvider;
+import org.apache.wicket.markup.html.WebComponent;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.basic.Label;
@@ -110,6 +111,21 @@ public class ComponentInitializationTest
                assertEquals(1, page.getCount());
        }
 
+       public void testOnInitializeSuperVerified()
+       {
+               TestPage page = new TestPage();
+               boolean illegalState = false;
+               try
+               {
+                       page.add(new 
PossibleDevelopedComponent("addedComponent"));
+               }
+               catch (IllegalStateException e)
+               {
+                       illegalState = true;
+               }
+               assertTrue(illegalState);
+       }
+
        public static class TestPage extends WebPage implements 
IMarkupResourceStreamProvider
        {
                private int count = 0;
@@ -121,6 +137,7 @@ public class ComponentInitializationTest
                @Override
                protected void onInitialize()
                {
+                       super.onInitialize();
                        count++;
                        add(new Label("addedComponent",
                                "Testing addition of a component to show 
StackOverflowError"));
@@ -153,6 +170,7 @@ public class ComponentInitializationTest
                @Override
                protected void onInitialize()
                {
+                       super.onInitialize();
                        count++;
                }
 
@@ -163,4 +181,30 @@ public class ComponentInitializationTest
 
 
        }
+
+       private static class PossibleDevelopedComponent extends WebComponent
+       {
+               private final boolean initialized = false;
+
+               public PossibleDevelopedComponent(String id)
+               {
+                       super(id);
+               }
+
+               @Override
+               protected void onBeforeRender()
+               {
+                       super.onBeforeRender();
+                       if (!initialized)
+                       {
+                               onInitialize();
+                       }
+               }
+
+               @Override
+               protected void onInitialize()
+               {
+                       // possible already implemented method by some user
+               }
+       }
 }


Reply via email to