You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by iv...@apache.org on 2010/08/07 02:49:31 UTC

svn commit: r983153 - in /wicket/trunk/wicket/src: main/java/org/apache/wicket/Component.java main/java/org/apache/wicket/MarkupContainer.java test/java/org/apache/wicket/ComponentInitializationTest.java

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
+		}
+	}
 }