You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by jc...@apache.org on 2008/04/12 20:36:23 UTC

svn commit: r647484 - in /wicket/trunk/wicket/src/main/java/org/apache/wicket: ./ markup/html/form/ markup/repeater/data/ model/ util/collections/ util/tester/

Author: jcompagner
Date: Sat Apr 12 11:36:22 2008
New Revision: 647484

URL: http://svn.apache.org/viewvc?rev=647484&view=rev
Log:
more generics
including var args for behaviors/validators and child components

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/main/java/org/apache/wicket/markup/html/form/AbstractChoice.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/repeater/data/DataView.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/model/ResourceModel.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/util/collections/IntHashMap.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/util/collections/MicroMap.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/util/collections/MiniMap.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.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=647484&r1=647483&r2=647484&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 Apr 12 11:36:22 2008
@@ -926,27 +926,34 @@
 	 * thread</a>.
 	 * </p>
 	 * 
-	 * @param behavior
-	 *            The behavior modifier to be added
+	 * @param behaviors
+	 *            The behavior modifier(s) to be added
 	 * @return this (to allow method call chaining)
 	 */
-	public Component<T> add(final IBehavior behavior)
+	public Component<T> add(final IBehavior... behaviors)
 	{
-		if (behavior == null)
+		if (behaviors == null)
 		{
 			throw new IllegalArgumentException("Argument may not be null");
 		}
 
-		addBehavior(behavior);
-
-		if (!behavior.isTemporary())
+		for (IBehavior behavior : behaviors)
 		{
-			addStateChange(new AddedBehaviorChange(behavior));
-		}
+			if (behavior == null)
+			{
+				throw new IllegalArgumentException("Argument may not be null");
+			}
 
-		// Give handler the opportunity to bind this component
-		behavior.bind(this);
+			addBehavior(behavior);
 
+			if (!behavior.isTemporary())
+			{
+				addStateChange(new AddedBehaviorChange(behavior));
+			}
+
+			// Give handler the opportunity to bind this component
+			behavior.bind(this);
+		}
 		return this;
 	}
 
@@ -1027,9 +1034,9 @@
 			setFlag(FLAG_BEFORE_RENDERING_SUPER_CALL_VERIFIED, false);
 
 			getApplication().notifyPreComponentOnBeforeRenderListeners(this);
-			onBeforeRender();			
-			getApplication().notifyPostComponentOnBeforeRenderListeners(this); 
-			
+			onBeforeRender();
+			getApplication().notifyPostComponentOnBeforeRenderListeners(this);
+
 			if (!getFlag(FLAG_BEFORE_RENDERING_SUPER_CALL_VERIFIED))
 			{
 				throw new IllegalStateException(Component.class.getName() +
@@ -4018,11 +4025,13 @@
 	}
 
 	/**
+	 * @param <V>
+	 *            The model type
 	 * @param model
 	 *            The model to wrap if need be
 	 * @return The wrapped model
 	 */
-	protected final IModel wrap(final IModel< ? > model)
+	protected final <V> IModel<V> wrap(final IModel<V> model)
 	{
 		if (model instanceof IComponentAssignedModel)
 		{

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=647484&r1=647483&r2=647484&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 Apr 12 11:36:22 2008
@@ -125,28 +125,32 @@
 	 *             Thrown if a child with the same id is replaced by the add operation.
 	 * @return This
 	 */
-	public final MarkupContainer<T> add(final Component< ? > child)
+	public final MarkupContainer<T> add(final Component< ? >... childs)
 	{
-		checkHierarchyChange(child);
-
-		if (child == null)
+		for (Component< ? > child : childs)
 		{
-			throw new IllegalArgumentException("argument child may not be null");
-		}
 
-		if (log.isDebugEnabled())
-		{
-			log.debug("Add " + child.getId() + " to " + this);
-		}
+			checkHierarchyChange(child);
 
-		// Add to map
-		addedComponent(child);
-		if (put(child) != null)
-		{
-			throw new IllegalArgumentException(exceptionMessage("A child with id '" +
-				child.getId() + "' already exists"));
-		}
+			if (child == null)
+			{
+				throw new IllegalArgumentException("argument child may not be null");
+			}
+
+			if (log.isDebugEnabled())
+			{
+				log.debug("Add " + child.getId() + " to " + this);
+			}
+
+			// Add to map
+			addedComponent(child);
+			if (put(child) != null)
+			{
+				throw new IllegalArgumentException(exceptionMessage("A child with id '" +
+					child.getId() + "' already exists"));
+			}
 
+		}
 		return this;
 	}
 
@@ -154,26 +158,30 @@
 	 * Replaces a child component of this container with another or just adds it in case no child
 	 * with the same id existed yet.
 	 * 
-	 * @param child
-	 *            The child
+	 * @param childs
+	 *            The child(s) to be added or replaced
 	 * @return This
 	 */
-	public final MarkupContainer<T> addOrReplace(final Component< ? > child)
+	public final MarkupContainer<T> addOrReplace(final Component< ? >... childs)
 	{
-		checkHierarchyChange(child);
-
-		if (child == null)
+		for (Component< ? > child : childs)
 		{
-			throw new IllegalArgumentException("argument child must be not null");
-		}
 
-		if (get(child.getId()) == null)
-		{
-			add(child);
-		}
-		else
-		{
-			replace(child);
+			checkHierarchyChange(child);
+
+			if (child == null)
+			{
+				throw new IllegalArgumentException("argument child must be not null");
+			}
+
+			if (get(child.getId()) == null)
+			{
+				add(child);
+			}
+			else
+			{
+				replace(child);
+			}
 		}
 
 		return this;

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/AbstractChoice.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/AbstractChoice.java?rev=647484&r1=647483&r2=647484&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/AbstractChoice.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/AbstractChoice.java Sat Apr 12 11:36:22 2008
@@ -64,7 +64,7 @@
 	 */
 	public AbstractChoice(final String id)
 	{
-		this(id, new Model(new ArrayList()), new ChoiceRenderer());
+		this(id, new Model(new ArrayList<E>()), new ChoiceRenderer<E>());
 	}
 
 	/**
@@ -78,7 +78,7 @@
 	 */
 	public AbstractChoice(final String id, final List<E> choices)
 	{
-		this(id, new Model((Serializable)choices), new ChoiceRenderer());
+		this(id, new Model((Serializable)choices), new ChoiceRenderer<E>());
 	}
 
 	/**
@@ -110,7 +110,7 @@
 	 */
 	public AbstractChoice(final String id, IModel<T> model, final List<E> choices)
 	{
-		this(id, model, new Model((Serializable)choices), new ChoiceRenderer());
+		this(id, model, new Model((Serializable)choices), new ChoiceRenderer<E>());
 	}
 
 	/**
@@ -143,7 +143,7 @@
 	 */
 	public AbstractChoice(final String id, final IModel<List<E>> choices)
 	{
-		this(id, choices, new ChoiceRenderer());
+		this(id, choices, new ChoiceRenderer<E>());
 	}
 
 	/**
@@ -178,7 +178,7 @@
 	 */
 	public AbstractChoice(final String id, IModel<T> model, final IModel<List<E>> choices)
 	{
-		this(id, model, choices, new ChoiceRenderer());
+		this(id, model, choices, new ChoiceRenderer<E>());
 	}
 
 	/**
@@ -276,7 +276,7 @@
 	{
 		if (renderer == null)
 		{
-			renderer = new ChoiceRenderer();
+			renderer = new ChoiceRenderer<E>();
 		}
 		this.renderer = renderer;
 		return this;
@@ -381,7 +381,7 @@
 		String selected)
 	{
 		Object objectValue = renderer.getDisplayValue(choice);
-		Class objectClass = objectValue == null ? null : objectValue.getClass();
+		Class< ? extends Object> objectClass = objectValue == null ? null : objectValue.getClass();
 		String displayValue = "";
 		if (objectClass != null && objectClass != String.class)
 		{
@@ -459,7 +459,7 @@
 	{
 		private static final long serialVersionUID = 1L;
 
-		private final IModel oldChoices;
+		private final IModel<List<E>> oldChoices;
 
 		/**
 		 * Construct.

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java?rev=647484&r1=647483&r2=647484&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java Sat Apr 12 11:36:22 2008
@@ -472,28 +472,35 @@
 	/**
 	 * Adds a validator to this form component.
 	 * 
-	 * @param validator
-	 *            The validator
+	 * @param validators
+	 *            The validator(s) to be added
 	 * @return This
 	 * @throws IllegalArgumentException
 	 *             if validator is null
 	 * @see IValidator
 	 * @see IValidatorAddListener
 	 */
-	public final FormComponent<T> add(final IValidator validator)
+	public final FormComponent<T> add(final IValidator... validators)
 	{
-		if (validator == null)
+		if (validators == null)
 		{
 			throw new IllegalArgumentException("validator argument cannot be null");
 		}
 
-		// add the validator
-		validators_add(validator);
-
-		// see whether the validator listens for add events
-		if (validator instanceof IValidatorAddListener)
+		for (IValidator validator : validators)
 		{
-			((IValidatorAddListener)validator).onAdded(this);
+			if (validator == null)
+			{
+				throw new IllegalArgumentException("validator argument cannot be null");
+			}
+			// add the validator
+			validators_add(validator);
+
+			// see whether the validator listens for add events
+			if (validator instanceof IValidatorAddListener)
+			{
+				((IValidatorAddListener)validator).onAdded(this);
+			}
 		}
 
 		// return this for chaining

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/repeater/data/DataView.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/repeater/data/DataView.java?rev=647484&r1=647483&r2=647484&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/repeater/data/DataView.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/repeater/data/DataView.java Sat Apr 12 11:36:22 2008
@@ -59,6 +59,8 @@
  * 
  * @author Igor Vaynberg (ivaynberg)
  * 
+ * @param <T>
+ *            The Model type.
  */
 public abstract class DataView<T> extends DataViewBase<T>
 {
@@ -74,7 +76,7 @@
 	 * @param dataProvider
 	 *            data provider
 	 */
-  protected DataView(String id, IDataProvider<T> dataProvider)
+	protected DataView(String id, IDataProvider<T> dataProvider)
 	{
 		super(id, dataProvider);
 	}
@@ -87,7 +89,7 @@
 	 * @param itemsPerPage
 	 *            items per page
 	 */
-  protected DataView(String id, IDataProvider<T> dataProvider, int itemsPerPage)
+	protected DataView(String id, IDataProvider<T> dataProvider, int itemsPerPage)
 	{
 		super(id, dataProvider);
 		setItemsPerPage(itemsPerPage);

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/model/ResourceModel.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/model/ResourceModel.java?rev=647484&r1=647483&r2=647484&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/model/ResourceModel.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/model/ResourceModel.java Sat Apr 12 11:36:22 2008
@@ -30,7 +30,9 @@
  * @author Igor Vaynberg (ivaynberg)
  * 
  */
-public class ResourceModel extends AbstractReadOnlyModel implements IComponentAssignedModel
+public class ResourceModel extends AbstractReadOnlyModel<String>
+	implements
+		IComponentAssignedModel<String>
 {
 	private static final long serialVersionUID = 1L;
 
@@ -67,18 +69,19 @@
 	/**
 	 * @see org.apache.wicket.model.AbstractReadOnlyModel#getObject()
 	 */
-	public Object getObject()
+	@Override
+	public String getObject()
 	{
 		// this shouldn't be called always wrapped!
 		return Application.get().getResourceSettings().getLocalizer().getString(resourceKey,
-			(Component)null, defaultValue);
+			(Component<String>)null, defaultValue);
 	}
 
 
 	/**
 	 * @see org.apache.wicket.model.IComponentAssignedModel#wrapOnAssignment(org.apache.wicket.Component)
 	 */
-	public IWrapModel wrapOnAssignment(final Component component)
+	public IWrapModel<String> wrapOnAssignment(final Component<String> component)
 	{
 		return new AssignmentWrapper(resourceKey, defaultValue, component);
 	}
@@ -86,11 +89,11 @@
 	/**
 	 * 
 	 */
-	private class AssignmentWrapper extends ResourceModel implements IWrapModel
+	private class AssignmentWrapper extends ResourceModel implements IWrapModel<String>
 	{
 		private static final long serialVersionUID = 1L;
 
-		private final Component component;
+		private final Component<String> component;
 
 		/**
 		 * Construct.
@@ -99,7 +102,8 @@
 		 * @param defaultValue
 		 * @param component
 		 */
-		public AssignmentWrapper(String resourceKey, String defaultValue, Component component)
+		public AssignmentWrapper(String resourceKey, String defaultValue,
+			Component<String> component)
 		{
 			super(resourceKey, defaultValue);
 			this.component = component;
@@ -108,7 +112,7 @@
 		/**
 		 * @see org.apache.wicket.model.IWrapModel#getWrappedModel()
 		 */
-		public IModel getWrappedModel()
+		public IModel<String> getWrappedModel()
 		{
 			return ResourceModel.this;
 		}
@@ -116,12 +120,14 @@
 		/**
 		 * @see org.apache.wicket.model.AbstractReadOnlyModel#getObject()
 		 */
-		public Object getObject()
+		@Override
+		public String getObject()
 		{
 			return Application.get().getResourceSettings().getLocalizer().getString(resourceKey,
 				component, defaultValue);
 		}
 
+		@Override
 		public void detach()
 		{
 			super.detach();

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/util/collections/IntHashMap.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/util/collections/IntHashMap.java?rev=647484&r1=647483&r2=647484&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/util/collections/IntHashMap.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/util/collections/IntHashMap.java Sat Apr 12 11:36:22 2008
@@ -32,12 +32,15 @@
  * that the key is directly an integer. So no hash is calculated or key object is stored.
  * 
  * @author jcompagner
+ * 
+ * @param <V>
+ *            The value in the map
  */
-public class IntHashMap implements Cloneable, Serializable
+public class IntHashMap<V> implements Cloneable, Serializable
 {
-	transient volatile Set keySet = null;
+	transient volatile Set<Integer> keySet = null;
 
-	transient volatile Collection values = null;
+	transient volatile Collection<V> values = null;
 
 	/**
 	 * The default initial capacity - MUST be a power of two.
@@ -58,7 +61,7 @@
 	/**
 	 * The table, resized as necessary. Length MUST Always be a power of two.
 	 */
-	transient Entry[] table;
+	transient Entry<V>[] table;
 
 	/**
 	 * The number of key-value mappings contained in this identity hash map.
@@ -102,7 +105,7 @@
 		if (initialCapacity < 0)
 		{
 			throw new IllegalArgumentException("Illegal initial capacity: " + //$NON-NLS-1$
-					initialCapacity);
+				initialCapacity);
 		}
 		if (initialCapacity > MAXIMUM_CAPACITY)
 		{
@@ -111,7 +114,7 @@
 		if (loadFactor <= 0 || Float.isNaN(loadFactor))
 		{
 			throw new IllegalArgumentException("Illegal load factor: " + //$NON-NLS-1$
-					loadFactor);
+				loadFactor);
 		}
 
 		// Find a power of 2 >= initialCapacity
@@ -213,7 +216,7 @@
 	public Object get(int key)
 	{
 		int i = indexFor(key, table.length);
-		Entry e = table[i];
+		Entry<V> e = table[i];
 		while (true)
 		{
 			if (e == null)
@@ -238,7 +241,7 @@
 	public boolean containsKey(int key)
 	{
 		int i = indexFor(key, table.length);
-		Entry e = table[i];
+		Entry<V> e = table[i];
 		while (e != null)
 		{
 			if (key == e.key)
@@ -257,10 +260,10 @@
 	 * @param key
 	 * @return The Entry object for the given hash key
 	 */
-	Entry getEntry(int key)
+	Entry<V> getEntry(int key)
 	{
 		int i = indexFor(key, table.length);
-		Entry e = table[i];
+		Entry<V> e = table[i];
 		while (e != null && !(key == e.key))
 		{
 			e = e.next;
@@ -280,15 +283,15 @@
 	 *         mapping for key. A <tt>null</tt> return can also indicate that the HashMap
 	 *         previously associated <tt>null</tt> with the specified key.
 	 */
-	public Object put(int key, Object value)
+	public Object put(int key, V value)
 	{
 		int i = indexFor(key, table.length);
 
-		for (Entry e = table[i]; e != null; e = e.next)
+		for (Entry<V> e = table[i]; e != null; e = e.next)
 		{
 			if (key == e.key)
 			{
-				Object oldValue = e.value;
+				V oldValue = e.value;
 				e.value = value;
 				return oldValue;
 			}
@@ -307,7 +310,7 @@
 	 * @param key
 	 * @param value
 	 */
-	private void putForCreate(int key, Object value)
+	private void putForCreate(int key, V value)
 	{
 		int i = indexFor(key, table.length);
 
@@ -316,7 +319,7 @@
 		 * will only happen for construction if the input Map is a sorted map whose ordering is
 		 * inconsistent w/ equals.
 		 */
-		for (Entry e = table[i]; e != null; e = e.next)
+		for (Entry<V> e = table[i]; e != null; e = e.next)
 		{
 			if (key == e.key)
 			{
@@ -328,11 +331,11 @@
 		createEntry(key, value, i);
 	}
 
-	void putAllForCreate(IntHashMap m)
+	void putAllForCreate(IntHashMap<V> m)
 	{
-		for (Iterator i = m.entrySet().iterator(); i.hasNext();)
+		for (Iterator<Entry<V>> i = m.entrySet().iterator(); i.hasNext();)
 		{
-			Entry e = (Entry)i.next();
+			Entry<V> e = i.next();
 			putForCreate(e.getKey(), e.getValue());
 		}
 	}
@@ -350,7 +353,7 @@
 	 */
 	void resize(int newCapacity)
 	{
-		Entry[] oldTable = table;
+		Entry<V>[] oldTable = table;
 		int oldCapacity = oldTable.length;
 		if (oldCapacity == MAXIMUM_CAPACITY)
 		{
@@ -358,7 +361,7 @@
 			return;
 		}
 
-		Entry[] newTable = new Entry[newCapacity];
+		Entry<V>[] newTable = new Entry[newCapacity];
 		transfer(newTable);
 		table = newTable;
 		threshold = (int)(newCapacity * loadFactor);
@@ -369,19 +372,19 @@
 	 * 
 	 * @param newTable
 	 */
-	void transfer(Entry[] newTable)
+	void transfer(Entry<V>[] newTable)
 	{
-		Entry[] src = table;
+		Entry<V>[] src = table;
 		int newCapacity = newTable.length;
 		for (int j = 0; j < src.length; j++)
 		{
-			Entry e = src[j];
+			Entry<V> e = src[j];
 			if (e != null)
 			{
 				src[j] = null;
 				do
 				{
-					Entry next = e.next;
+					Entry<V> next = e.next;
 					int i = indexFor(e.key, newCapacity);
 					e.next = newTable[i];
 					newTable[i] = e;
@@ -401,7 +404,7 @@
 	 * @throws NullPointerException
 	 *             if the specified map is null.
 	 */
-	public void putAll(IntHashMap m)
+	public void putAll(IntHashMap<V> m)
 	{
 		int numKeysToBeAdded = m.size();
 		if (numKeysToBeAdded == 0)
@@ -434,9 +437,9 @@
 			}
 		}
 
-		for (Iterator i = m.entrySet().iterator(); i.hasNext();)
+		for (Iterator<Entry<V>> i = m.entrySet().iterator(); i.hasNext();)
 		{
-			Entry e = (Entry)i.next();
+			Entry<V> e = i.next();
 			put(e.getKey(), e.getValue());
 		}
 	}
@@ -452,7 +455,7 @@
 	 */
 	public Object remove(int key)
 	{
-		Entry e = removeEntryForKey(key);
+		Entry<V> e = removeEntryForKey(key);
 		return (e == null ? e : e.value);
 	}
 
@@ -463,15 +466,15 @@
 	 * @param key
 	 * @return The Entry object that was removed
 	 */
-	Entry removeEntryForKey(int key)
+	Entry<V> removeEntryForKey(int key)
 	{
 		int i = indexFor(key, table.length);
-		Entry prev = table[i];
-		Entry e = prev;
+		Entry<V> prev = table[i];
+		Entry<V> e = prev;
 
 		while (e != null)
 		{
-			Entry next = e.next;
+			Entry<V> next = e.next;
 			if (key == e.key)
 			{
 				modCount++;
@@ -499,22 +502,22 @@
 	 * @param o
 	 * @return The entry that was removed
 	 */
-	Entry removeMapping(Object o)
+	Entry<V> removeMapping(Object o)
 	{
 		if (!(o instanceof Entry))
 		{
 			return null;
 		}
 
-		Entry entry = (Entry)o;
+		Entry<V> entry = (Entry)o;
 		int key = entry.getKey();
 		int i = indexFor(key, table.length);
-		Entry prev = table[i];
-		Entry e = prev;
+		Entry<V> prev = table[i];
+		Entry<V> e = prev;
 
 		while (e != null)
 		{
-			Entry next = e.next;
+			Entry<V> next = e.next;
 			if (e.key == key && e.equals(entry))
 			{
 				modCount++;
@@ -542,7 +545,7 @@
 	public void clear()
 	{
 		modCount++;
-		Entry tab[] = table;
+		Entry<V> tab[] = table;
 		for (int i = 0; i < tab.length; i++)
 		{
 			tab[i] = null;
@@ -564,10 +567,10 @@
 			return containsNullValue();
 		}
 
-		Entry tab[] = table;
+		Entry<V> tab[] = table;
 		for (int i = 0; i < tab.length; i++)
 		{
-			for (Entry e = tab[i]; e != null; e = e.next)
+			for (Entry<V> e = tab[i]; e != null; e = e.next)
 			{
 				if (value.equals(e.value))
 				{
@@ -585,10 +588,10 @@
 	 */
 	private boolean containsNullValue()
 	{
-		Entry tab[] = table;
+		Entry<V> tab[] = table;
 		for (int i = 0; i < tab.length; i++)
 		{
-			for (Entry e = tab[i]; e != null; e = e.next)
+			for (Entry<V> e = tab[i]; e != null; e = e.next)
 			{
 				if (e.value == null)
 				{
@@ -605,9 +608,10 @@
 	 * 
 	 * @return a shallow copy of this map.
 	 */
+	@Override
 	public Object clone() throws CloneNotSupportedException
 	{
-		IntHashMap result = null;
+		IntHashMap<V> result = null;
 		try
 		{
 			result = (IntHashMap)super.clone();
@@ -628,11 +632,11 @@
 	/**
 	 * @author jcompagner
 	 */
-	public static class Entry
+	public static class Entry<V>
 	{
 		final int key;
-		Object value;
-		Entry next;
+		V value;
+		Entry<V> next;
 
 		/**
 		 * Create new entry.
@@ -641,7 +645,7 @@
 		 * @param v
 		 * @param n
 		 */
-		Entry(int k, Object v, Entry n)
+		Entry(int k, V v, Entry<V> n)
 		{
 			value = v;
 			next = n;
@@ -659,7 +663,7 @@
 		/**
 		 * @return Gets the value object of this entry
 		 */
-		public Object getValue()
+		public V getValue()
 		{
 			return value;
 		}
@@ -668,9 +672,9 @@
 		 * @param newValue
 		 * @return The previous value
 		 */
-		public Object setValue(Object newValue)
+		public V setValue(V newValue)
 		{
-			Object oldValue = value;
+			V oldValue = value;
 			value = newValue;
 			return oldValue;
 		}
@@ -678,13 +682,14 @@
 		/**
 		 * @see java.lang.Object#equals(java.lang.Object)
 		 */
+		@Override
 		public boolean equals(Object o)
 		{
 			if (!(o instanceof Entry))
 			{
 				return false;
 			}
-			Entry e = (Entry)o;
+			Entry<V> e = (Entry<V>)o;
 			int k1 = getKey();
 			int k2 = e.getKey();
 			if (k1 == k2)
@@ -702,6 +707,7 @@
 		/**
 		 * @see java.lang.Object#hashCode()
 		 */
+		@Override
 		public int hashCode()
 		{
 			return key ^ (value == null ? 0 : value.hashCode());
@@ -710,6 +716,7 @@
 		/**
 		 * @see java.lang.Object#toString()
 		 */
+		@Override
 		public String toString()
 		{
 			return getKey() + "=" + getValue(); //$NON-NLS-1$
@@ -726,9 +733,9 @@
 	 * @param value
 	 * @param bucketIndex
 	 */
-	void addEntry(int key, Object value, int bucketIndex)
+	void addEntry(int key, V value, int bucketIndex)
 	{
-		table[bucketIndex] = new Entry(key, value, table[bucketIndex]);
+		table[bucketIndex] = new Entry<V>(key, value, table[bucketIndex]);
 		if (size++ >= threshold)
 		{
 			resize(2 * table.length);
@@ -746,25 +753,25 @@
 	 * @param value
 	 * @param bucketIndex
 	 */
-	void createEntry(int key, Object value, int bucketIndex)
+	void createEntry(int key, V value, int bucketIndex)
 	{
-		table[bucketIndex] = new Entry(key, value, table[bucketIndex]);
+		table[bucketIndex] = new Entry<V>(key, value, table[bucketIndex]);
 		size++;
 	}
 
-	private abstract class HashIterator implements Iterator
+	private abstract class HashIterator<H> implements Iterator<H>
 	{
-		Entry next; // next entry to return
+		Entry<V> next; // next entry to return
 		int expectedModCount; // For fast-fail
 		int index; // current slot
-		Entry current; // current entry
+		Entry<V> current; // current entry
 
 		HashIterator()
 		{
 			expectedModCount = modCount;
-			Entry[] t = table;
+			Entry<V>[] t = table;
 			int i = t.length;
-			Entry n = null;
+			Entry<V> n = null;
 			if (size != 0)
 			{ // advance to first entry
 				while (i > 0 && (n = t[--i]) == null)
@@ -784,20 +791,20 @@
 			return next != null;
 		}
 
-		Entry nextEntry()
+		Entry<V> nextEntry()
 		{
 			if (modCount != expectedModCount)
 			{
 				throw new ConcurrentModificationException();
 			}
-			Entry e = next;
+			Entry<V> e = next;
 			if (e == null)
 			{
 				throw new NoSuchElementException();
 			}
 
-			Entry n = e.next;
-			Entry[] t = table;
+			Entry<V> n = e.next;
+			Entry<V>[] t = table;
 			int i = index;
 			while (n == null && i > 0)
 			{
@@ -829,58 +836,59 @@
 
 	}
 
-	private class ValueIterator extends HashIterator
+	private class ValueIterator extends HashIterator<V>
 	{
 		/**
 		 * @see java.util.Iterator#next()
 		 */
-		public Object next()
+		public V next()
 		{
 			return nextEntry().value;
 		}
 	}
 
-	private class KeyIterator extends HashIterator
+	private class KeyIterator extends HashIterator<Integer>
 	{
 		/**
 		 * @see java.util.Iterator#next()
 		 */
-		public Object next()
+		public Integer next()
 		{
 			return new Integer(nextEntry().getKey());
 		}
 	}
 
-	private class EntryIterator extends HashIterator
+	private class EntryIterator extends HashIterator<Entry<V>>
 	{
 		/**
 		 * @see java.util.Iterator#next()
 		 */
-		public Object next()
+		public Entry<V> next()
 		{
-			return nextEntry();
+			Entry<V> nextEntry = nextEntry();
+			return nextEntry;
 		}
 	}
 
 	// Subclass overrides these to alter behavior of views' iterator() method
-	Iterator newKeyIterator()
+	Iterator<Integer> newKeyIterator()
 	{
 		return new KeyIterator();
 	}
 
-	Iterator newValueIterator()
+	Iterator<V> newValueIterator()
 	{
 		return new ValueIterator();
 	}
 
-	Iterator newEntryIterator()
+	Iterator<Entry<V>> newEntryIterator()
 	{
 		return new EntryIterator();
 	}
 
 	// Views
 
-	private transient Set entrySet = null;
+	private transient Set<Entry<V>> entrySet = null;
 
 	/**
 	 * Returns a set view of the keys contained in this map. The set is backed by the map, so
@@ -892,18 +900,19 @@
 	 * 
 	 * @return a set view of the keys contained in this map.
 	 */
-	public Set keySet()
+	public Set<Integer> keySet()
 	{
-		Set ks = keySet;
+		Set<Integer> ks = keySet;
 		return (ks != null ? ks : (keySet = new KeySet()));
 	}
 
-	private class KeySet extends AbstractSet
+	private class KeySet extends AbstractSet<Integer>
 	{
 		/**
 		 * @see java.util.AbstractCollection#iterator()
 		 */
-		public Iterator iterator()
+		@Override
+		public Iterator<Integer> iterator()
 		{
 			return newKeyIterator();
 		}
@@ -911,6 +920,7 @@
 		/**
 		 * @see java.util.AbstractCollection#size()
 		 */
+		@Override
 		public int size()
 		{
 			return size;
@@ -919,6 +929,7 @@
 		/**
 		 * @see java.util.AbstractCollection#contains(java.lang.Object)
 		 */
+		@Override
 		public boolean contains(Object o)
 		{
 			if (o instanceof Number)
@@ -931,6 +942,7 @@
 		/**
 		 * @see java.util.AbstractCollection#remove(java.lang.Object)
 		 */
+		@Override
 		public boolean remove(Object o)
 		{
 			if (o instanceof Number)
@@ -943,6 +955,7 @@
 		/**
 		 * @see java.util.AbstractCollection#clear()
 		 */
+		@Override
 		public void clear()
 		{
 			IntHashMap.this.clear();
@@ -959,18 +972,19 @@
 	 * 
 	 * @return a collection view of the values contained in this map.
 	 */
-	public Collection values()
+	public Collection<V> values()
 	{
-		Collection vs = values;
+		Collection<V> vs = values;
 		return (vs != null ? vs : (values = new Values()));
 	}
 
-	private class Values extends AbstractCollection
+	private class Values extends AbstractCollection<V>
 	{
 		/**
 		 * @see java.util.AbstractCollection#iterator()
 		 */
-		public Iterator iterator()
+		@Override
+		public Iterator<V> iterator()
 		{
 			return newValueIterator();
 		}
@@ -978,6 +992,7 @@
 		/**
 		 * @see java.util.AbstractCollection#size()
 		 */
+		@Override
 		public int size()
 		{
 			return size;
@@ -986,6 +1001,7 @@
 		/**
 		 * @see java.util.AbstractCollection#contains(java.lang.Object)
 		 */
+		@Override
 		public boolean contains(Object o)
 		{
 			return containsValue(o);
@@ -994,6 +1010,7 @@
 		/**
 		 * @see java.util.AbstractCollection#clear()
 		 */
+		@Override
 		public void clear()
 		{
 			IntHashMap.this.clear();
@@ -1012,18 +1029,19 @@
 	 * @return a collection view of the mappings contained in this map.
 	 * @see Map.Entry
 	 */
-	public Set entrySet()
+	public Set<Entry<V>> entrySet()
 	{
-		Set es = entrySet;
+		Set<Entry<V>> es = entrySet;
 		return (es != null ? es : (entrySet = new EntrySet()));
 	}
 
-	private class EntrySet extends AbstractSet
+	private class EntrySet extends AbstractSet<Entry<V>>
 	{
 		/**
 		 * @see java.util.AbstractCollection#iterator()
 		 */
-		public Iterator iterator()
+		@Override
+		public Iterator<Entry<V>> iterator()
 		{
 			return newEntryIterator();
 		}
@@ -1031,20 +1049,22 @@
 		/**
 		 * @see java.util.AbstractCollection#contains(java.lang.Object)
 		 */
+		@Override
 		public boolean contains(Object o)
 		{
 			if (!(o instanceof Entry))
 			{
 				return false;
 			}
-			Entry e = (Entry)o;
-			Entry candidate = getEntry(e.getKey());
+			Entry<V> e = (Entry)o;
+			Entry<V> candidate = getEntry(e.getKey());
 			return candidate != null && candidate.equals(e);
 		}
 
 		/**
 		 * @see java.util.AbstractCollection#remove(java.lang.Object)
 		 */
+		@Override
 		public boolean remove(Object o)
 		{
 			return removeMapping(o) != null;
@@ -1053,6 +1073,7 @@
 		/**
 		 * @see java.util.AbstractCollection#size()
 		 */
+		@Override
 		public int size()
 		{
 			return size;
@@ -1061,6 +1082,7 @@
 		/**
 		 * @see java.util.AbstractCollection#clear()
 		 */
+		@Override
 		public void clear()
 		{
 			IntHashMap.this.clear();
@@ -1093,9 +1115,9 @@
 		s.writeInt(size);
 
 		// Write out keys and values (alternating)
-		for (Iterator i = entrySet().iterator(); i.hasNext();)
+		for (Iterator<Entry<V>> i = entrySet().iterator(); i.hasNext();)
 		{
-			Entry e = (Entry)i.next();
+			Entry<V> e = i.next();
 			s.writeInt(e.getKey());
 			s.writeObject(e.getValue());
 		}
@@ -1128,7 +1150,7 @@
 		for (int i = 0; i < size; i++)
 		{
 			int key = s.readInt();
-			Object value = s.readObject();
+			V value = (V)s.readObject();
 			putForCreate(key, value);
 		}
 	}

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/util/collections/MicroMap.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/util/collections/MicroMap.java?rev=647484&r1=647483&r2=647484&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/util/collections/MicroMap.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/util/collections/MicroMap.java Sat Apr 12 11:36:22 2008
@@ -31,8 +31,12 @@
  * component.
  * 
  * @author Jonathan Locke
+ * @param <K>
+ *            Key type
+ * @param <V>
+ *            Value type
  */
-public final class MicroMap implements Map, Serializable
+public final class MicroMap<K, V> implements Map<K, V>, Serializable
 {
 	private static final long serialVersionUID = 1L;
 
@@ -40,10 +44,10 @@
 	public static final int MAX_ENTRIES = 1;
 
 	/** The one and only key in this tiny map */
-	private Object key;
+	private K key;
 
 	/** The value for the only key in this tiny map */
-	private Object value;
+	private V value;
 
 	/**
 	 * Constructor
@@ -60,7 +64,7 @@
 	 * @param value
 	 *            The value
 	 */
-	public MicroMap(final Object key, final Object value)
+	public MicroMap(final K key, final V value)
 	{
 		put(key, value);
 	}
@@ -108,7 +112,7 @@
 	/**
 	 * @see java.util.Map#get(java.lang.Object)
 	 */
-	public Object get(final Object key)
+	public V get(final Object key)
 	{
 		if (key.equals(this.key))
 		{
@@ -121,12 +125,12 @@
 	/**
 	 * @see java.util.Map#put(java.lang.Object, java.lang.Object)
 	 */
-	public Object put(final Object key, final Object value)
+	public V put(final K key, final V value)
 	{
 		// Replace?
 		if (key.equals(this.key))
 		{
-			final Object oldValue = this.value;
+			final V oldValue = this.value;
 
 			this.value = value;
 
@@ -153,14 +157,14 @@
 	/**
 	 * @see java.util.Map#remove(java.lang.Object)
 	 */
-	public Object remove(final Object key)
+	public V remove(final Object key)
 	{
 		if (key.equals(this.key))
 		{
-			final Object oldValue = this.value;
+			final V oldValue = value;
 
 			this.key = null;
-			this.value = null;
+			value = null;
 
 			return oldValue;
 		}
@@ -171,11 +175,11 @@
 	/**
 	 * @see java.util.Map#putAll(java.util.Map)
 	 */
-	public void putAll(final Map map)
+	public void putAll(final Map< ? extends K, ? extends V> map)
 	{
 		if (map.size() <= MAX_ENTRIES)
 		{
-			final Map.Entry e = (Map.Entry)map.entrySet().iterator().next();
+			final Entry< ? extends K, ? extends V> e = map.entrySet().iterator().next();
 
 			put(e.getKey(), e.getValue());
 		}
@@ -197,20 +201,21 @@
 	/**
 	 * @see java.util.Map#keySet()
 	 */
-	public Set keySet()
+	public Set<K> keySet()
 	{
-		return new AbstractSet()
+		return new AbstractSet<K>()
 		{
-			public Iterator iterator()
+			@Override
+			public Iterator<K> iterator()
 			{
-				return new Iterator()
+				return new Iterator<K>()
 				{
 					public boolean hasNext()
 					{
 						return index < MicroMap.this.size();
 					}
 
-					public Object next()
+					public K next()
 					{
 						if (!hasNext())
 						{
@@ -230,6 +235,7 @@
 				};
 			}
 
+			@Override
 			public int size()
 			{
 				return MicroMap.this.size();
@@ -240,11 +246,12 @@
 	/**
 	 * @see java.util.Map#values()
 	 */
-	public Collection values()
+	public Collection<V> values()
 	{
-		return new AbstractList()
+		return new AbstractList<V>()
 		{
-			public Object get(final int index)
+			@Override
+			public V get(final int index)
 			{
 				if (index > size() - 1)
 				{
@@ -253,6 +260,7 @@
 				return value;
 			}
 
+			@Override
 			public int size()
 			{
 				return MicroMap.this.size();
@@ -263,20 +271,21 @@
 	/**
 	 * @see java.util.Map#entrySet()
 	 */
-	public Set entrySet()
+	public Set<Entry<K, V>> entrySet()
 	{
-		return new AbstractSet()
+		return new AbstractSet<Entry<K, V>>()
 		{
-			public Iterator iterator()
+			@Override
+			public Iterator<Entry<K, V>> iterator()
 			{
-				return new Iterator()
+				return new Iterator<Entry<K, V>>()
 				{
 					public boolean hasNext()
 					{
 						return index < MicroMap.this.size();
 					}
 
-					public Object next()
+					public Entry<K, V> next()
 					{
 						if (!hasNext())
 						{
@@ -284,21 +293,21 @@
 						}
 						index++;
 
-						return new Map.Entry()
+						return new Map.Entry<K, V>()
 						{
-							public Object getKey()
+							public K getKey()
 							{
 								return key;
 							}
 
-							public Object getValue()
+							public V getValue()
 							{
 								return value;
 							}
 
-							public Object setValue(final Object value)
+							public V setValue(final V value)
 							{
-								final Object oldValue = MicroMap.this.value;
+								final V oldValue = MicroMap.this.value;
 
 								MicroMap.this.value = value;
 
@@ -316,6 +325,7 @@
 				};
 			}
 
+			@Override
 			public int size()
 			{
 				return MicroMap.this.size();

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/util/collections/MiniMap.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/util/collections/MiniMap.java?rev=647484&r1=647483&r2=647484&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/util/collections/MiniMap.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/util/collections/MiniMap.java Sat Apr 12 11:36:22 2008
@@ -30,16 +30,20 @@
  * index. Null key entries are available for use. This means that null is not a valid key.
  * 
  * @author Jonathan Locke
+ * @param <K>
+ *            Key type
+ * @param <V>
+ *            Value type
  */
-public class MiniMap implements Map, Serializable
+public class MiniMap<K, V> implements Map<K, V>, Serializable
 {
 	private static final long serialVersionUID = 1L;
 
 	/** The array of keys. Keys that are null are not used. */
-	private final Object[] keys;
+	private final K[] keys;
 
 	/** The array of values which correspond by index with the keys array. */
-	private final Object[] values;
+	private final V[] values;
 
 	/** The number of valid entries */
 	private int size;
@@ -55,8 +59,8 @@
 	 */
 	public MiniMap(final int maxEntries)
 	{
-		keys = new Object[maxEntries];
-		values = new Object[maxEntries];
+		keys = (K[])new Object[maxEntries];
+		values = (V[])new Object[maxEntries];
 	}
 
 	/**
@@ -67,7 +71,7 @@
 	 * @param maxEntries
 	 *            The maximum number of entries this map can hold
 	 */
-	public MiniMap(final Map map, final int maxEntries)
+	public MiniMap(final Map< ? extends K, ? extends V> map, final int maxEntries)
 	{
 		this(maxEntries);
 		putAll(map);
@@ -116,7 +120,7 @@
 	/**
 	 * @see java.util.Map#get(java.lang.Object)
 	 */
-	public Object get(final Object key)
+	public V get(final Object key)
 	{
 		// Search for key
 		final int index = findKey(key);
@@ -134,7 +138,7 @@
 	/**
 	 * @see java.util.Map#put(java.lang.Object, java.lang.Object)
 	 */
-	public Object put(final Object key, final Object value)
+	public V put(final K key, final V value)
 	{
 		// Search for key
 		final int index = findKey(key);
@@ -142,7 +146,7 @@
 		if (index != -1)
 		{
 			// Replace existing value
-			final Object oldValue = values[index];
+			final V oldValue = values[index];
 			values[index] = value;
 			return oldValue;
 		}
@@ -169,7 +173,7 @@
 	/**
 	 * @see java.util.Map#remove(java.lang.Object)
 	 */
-	public Object remove(final Object key)
+	public V remove(final Object key)
 	{
 		// Search for key
 		final int index = findKey(key);
@@ -177,7 +181,7 @@
 		if (index != -1)
 		{
 			// Store value
-			final Object oldValue = values[index];
+			final V oldValue = values[index];
 
 			keys[index] = null;
 			values[index] = null;
@@ -192,11 +196,12 @@
 	/**
 	 * @see java.util.Map#putAll(java.util.Map)
 	 */
-	public void putAll(final Map map)
+	public void putAll(Map< ? extends K, ? extends V> map)
 	{
-		for (final Iterator iterator = map.entrySet().iterator(); iterator.hasNext();)
+		for (final Iterator< ? extends Entry< ? extends K, ? extends V>> iterator = map.entrySet()
+			.iterator(); iterator.hasNext();)
 		{
-			final Map.Entry e = (Map.Entry)iterator.next();
+			final Map.Entry< ? extends K, ? extends V> e = iterator.next();
 			put(e.getKey(), e.getValue());
 		}
 	}
@@ -218,20 +223,21 @@
 	/**
 	 * @see java.util.Map#keySet()
 	 */
-	public Set keySet()
+	public Set<K> keySet()
 	{
-		return new AbstractSet()
+		return new AbstractSet<K>()
 		{
-			public Iterator iterator()
+			@Override
+			public Iterator<K> iterator()
 			{
-				return new Iterator()
+				return new Iterator<K>()
 				{
 					public boolean hasNext()
 					{
 						return i < size - 1;
 					}
 
-					public Object next()
+					public K next()
 					{
 						// Just in case... (WICKET-428)
 						if (!hasNext())
@@ -257,6 +263,7 @@
 				};
 			}
 
+			@Override
 			public int size()
 			{
 				return size;
@@ -267,11 +274,12 @@
 	/**
 	 * @see java.util.Map#values()
 	 */
-	public Collection values()
+	public Collection<V> values()
 	{
-		return new AbstractList()
+		return new AbstractList<V>()
 		{
-			public Object get(final int index)
+			@Override
+			public V get(final int index)
 			{
 				if (index > size - 1)
 				{
@@ -287,6 +295,7 @@
 				return values[keyIndex];
 			}
 
+			@Override
 			public int size()
 			{
 				return size;
@@ -297,20 +306,21 @@
 	/**
 	 * @see java.util.Map#entrySet()
 	 */
-	public Set entrySet()
+	public Set<Entry<K, V>> entrySet()
 	{
-		return new AbstractSet()
+		return new AbstractSet<Entry<K, V>>()
 		{
-			public Iterator iterator()
+			@Override
+			public Iterator<Entry<K, V>> iterator()
 			{
-				return new Iterator()
+				return new Iterator<Entry<K, V>>()
 				{
 					public boolean hasNext()
 					{
 						return index < size;
 					}
 
-					public Object next()
+					public Entry<K, V> next()
 					{
 						if (!hasNext())
 						{
@@ -321,21 +331,21 @@
 
 						index++;
 
-						return new Map.Entry()
+						return new Map.Entry<K, V>()
 						{
-							public Object getKey()
+							public K getKey()
 							{
 								return keys[keyIndex];
 							}
 
-							public Object getValue()
+							public V getValue()
 							{
 								return values[keyIndex];
 							}
 
-							public Object setValue(final Object value)
+							public V setValue(final V value)
 							{
-								final Object oldValue = values[keyIndex];
+								final V oldValue = values[keyIndex];
 
 								values[keyIndex] = value;
 
@@ -356,6 +366,7 @@
 				};
 			}
 
+			@Override
 			public int size()
 			{
 				return size;

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java?rev=647484&r1=647483&r2=647484&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java Sat Apr 12 11:36:22 2008
@@ -16,6 +16,7 @@
  */
 package org.apache.wicket.util.tester;
 
+import java.io.Serializable;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
@@ -116,16 +117,19 @@
 	 */
 	public static class DummyWebApplication extends WebApplication
 	{
-		public Class<? extends Page> getHomePage()
+		@Override
+		public Class< ? extends Page> getHomePage()
 		{
 			return DummyHomePage.class;
 		}
 
+		@Override
 		protected void outputDevelopmentModeWarning()
 		{
 			// Do nothing.
 		}
 
+		@Override
 		protected ISessionStore newSessionStore()
 		{
 			// Don't use a filestore, or we spawn lots of threads, which makes
@@ -156,16 +160,19 @@
 			/**
 			 * @see org.apache.wicket.Application#getHomePage()
 			 */
-			public Class<? extends Page> getHomePage()
+			@Override
+			public Class< ? extends Page> getHomePage()
 			{
 				return homePage;
 			}
 
+			@Override
 			protected void outputDevelopmentModeWarning()
 			{
 				// Do nothing.
 			}
 
+			@Override
 			protected ISessionStore newSessionStore()
 			{
 				// Don't use a filestore, or we spawn lots of threads, which
@@ -737,7 +744,7 @@
 		 */
 		else if (linkComponent instanceof SubmitLink)
 		{
-			SubmitLink submitLink = (SubmitLink)linkComponent;
+			SubmitLink< ? > submitLink = (SubmitLink)linkComponent;
 
 			String pageRelativePath = submitLink.getInputName();
 			getParametersForNextRequest().put(pageRelativePath, "x");
@@ -746,7 +753,7 @@
 		// if the link is a normal link (or ResourceLink)
 		else if (linkComponent instanceof AbstractLink)
 		{
-			AbstractLink link = (AbstractLink)linkComponent;
+			AbstractLink< ? > link = (AbstractLink)linkComponent;
 
 			/*
 			 * If the link is a bookmarkable link, then we need to transfer the parameters to the
@@ -759,11 +766,11 @@
 				{
 					Field parametersField = BookmarkablePageLink.class.getDeclaredField("parameters");
 					Method getParametersMethod = BookmarkablePageLink.class.getDeclaredMethod(
-						"getPageParameters", null);
+						"getPageParameters", (Class[])null);
 					getParametersMethod.setAccessible(true);
 
 					PageParameters parameters = (PageParameters)getParametersMethod.invoke(
-						bookmarkablePageLink, null);
+						bookmarkablePageLink, (Class[])null);
 					setParametersForNextRequest(parameters);
 				}
 				catch (Exception e)
@@ -897,7 +904,7 @@
 	 */
 	public Result hasNoErrorMessage()
 	{
-		List messages = getMessages(FeedbackMessage.ERROR);
+		List<Serializable> messages = getMessages(FeedbackMessage.ERROR);
 		return isTrue("expect no error message, but contains\n" +
 			WicketTesterHelper.asLined(messages), messages.isEmpty());
 	}
@@ -909,7 +916,7 @@
 	 */
 	public Result hasNoInfoMessage()
 	{
-		List messages = getMessages(FeedbackMessage.INFO);
+		List<Serializable> messages = getMessages(FeedbackMessage.INFO);
 		return isTrue("expect no info message, but contains\n" +
 			WicketTesterHelper.asLined(messages), messages.isEmpty());
 	}
@@ -923,7 +930,7 @@
 	 * @return <code>List</code> of messages (as <code>String</code>s)
 	 * @see FeedbackMessage
 	 */
-	public List getMessages(final int level)
+	public List<Serializable> getMessages(final int level)
 	{
 		FeedbackMessages feedbackMessages = Session.get().getFeedbackMessages();
 		List allMessages = feedbackMessages.messages(new IFeedbackMessageFilter()
@@ -935,7 +942,7 @@
 				return message.getLevel() == level;
 			}
 		});
-		List actualMessages = new ArrayList();
+		List<Serializable> actualMessages = new ArrayList<Serializable>();
 		for (Iterator iter = allMessages.iterator(); iter.hasNext();)
 		{
 			actualMessages.add(((FeedbackMessage)iter.next()).getMessage());
@@ -1224,6 +1231,7 @@
 
 		form.visitFormComponents(new FormComponent.AbstractVisitor()
 		{
+			@Override
 			public void onFormComponent(FormComponent formComponent)
 			{
 				// !(formComponent instanceof Button) &&