Max Bowsher wrote:
> Today I noticed I could in fact have a single implementation of
> IChoiceRenderer which would work for most of my different persistent
> classes, which all implement INamedPersistentObject exposing primary key
> and human-friendly name - so I defined an
> IChoiceRenderer<INamedPersistentObject> as a singleton and attempted to
> use it.
> 
> 
> I was immediately confronted with the problem that Wicket's choice
> components want to receive an IChoiceRenderer<T>. I think all these
> should be changed to IChoiceRenderer<? super T> to avoid imposing an
> arbitrary unnecessary limitation.

Patch implementing the above.

Max.

Index: src/main/java/org/apache/wicket/markup/html/form/CheckBoxMultipleChoice.java
===================================================================
--- src/main/java/org/apache/wicket/markup/html/form/CheckBoxMultipleChoice.java	(revision 782725)
+++ src/main/java/org/apache/wicket/markup/html/form/CheckBoxMultipleChoice.java	(working copy)
@@ -179,7 +179,7 @@
 	 *      java.util.List,org.apache.wicket.markup.html.form.IChoiceRenderer)
 	 */
 	public CheckBoxMultipleChoice(final String id, final List<? extends T> choices,
-		final IChoiceRenderer<T> renderer)
+		final IChoiceRenderer<? super T> renderer)
 	{
 		super(id, choices, renderer);
 	}
@@ -218,7 +218,7 @@
 	 *      java.util.List,org.apache.wicket.markup.html.form.IChoiceRenderer)
 	 */
 	public CheckBoxMultipleChoice(final String id, IModel<Collection<T>> model,
-		final List<? extends T> choices, final IChoiceRenderer<T> renderer)
+		final List<? extends T> choices, final IChoiceRenderer<? super T> renderer)
 	{
 		super(id, model, choices, renderer);
 	}
@@ -271,7 +271,7 @@
 	 * @see org.apache.wicket.Component#Component(String)
 	 */
 	public CheckBoxMultipleChoice(String id, IModel<? extends List<? extends T>> choices,
-		IChoiceRenderer<T> renderer)
+		IChoiceRenderer<? super T> renderer)
 	{
 		super(id, choices, renderer);
 	}
@@ -293,7 +293,7 @@
 	 *      org.apache.wicket.model.IModel,org.apache.wicket.markup.html.form.IChoiceRenderer)
 	 */
 	public CheckBoxMultipleChoice(String id, IModel<Collection<T>> model,
-		IModel<? extends List<? extends T>> choices, IChoiceRenderer<T> renderer)
+		IModel<? extends List<? extends T>> choices, IChoiceRenderer<? super T> renderer)
 	{
 		super(id, model, choices, renderer);
 	}
Index: src/main/java/org/apache/wicket/markup/html/form/AbstractSingleSelectChoice.java
===================================================================
--- src/main/java/org/apache/wicket/markup/html/form/AbstractSingleSelectChoice.java	(revision 782725)
+++ src/main/java/org/apache/wicket/markup/html/form/AbstractSingleSelectChoice.java	(working copy)
@@ -70,7 +70,7 @@
 	 * @see AbstractChoice#AbstractChoice(String, List ,IChoiceRenderer)
 	 */
 	public AbstractSingleSelectChoice(final String id, final List<? extends T> data,
-		final IChoiceRenderer<T> renderer)
+		final IChoiceRenderer<? super T> renderer)
 	{
 		super(id, data, renderer);
 	}
@@ -91,7 +91,7 @@
 	 * @see AbstractChoice#AbstractChoice(String, IModel, List, IChoiceRenderer)
 	 */
 	public AbstractSingleSelectChoice(final String id, IModel<T> model,
-		final List<? extends T> data, final IChoiceRenderer<T> renderer)
+		final List<? extends T> data, final IChoiceRenderer<? super T> renderer)
 	{
 		super(id, model, data, renderer);
 	}
@@ -117,7 +117,7 @@
 	 *      IModel,IChoiceRenderer)
 	 */
 	public AbstractSingleSelectChoice(String id, IModel<? extends List<? extends T>> choices,
-		IChoiceRenderer<T> renderer)
+		IChoiceRenderer<? super T> renderer)
 	{
 		super(id, choices, renderer);
 	}
@@ -128,7 +128,7 @@
 	 *      IModel,IChoiceRenderer)
 	 */
 	public AbstractSingleSelectChoice(String id, IModel<T> model,
-		IModel<? extends List<? extends T>> choices, IChoiceRenderer<T> renderer)
+		IModel<? extends List<? extends T>> choices, IChoiceRenderer<? super T> renderer)
 	{
 		super(id, model, choices, renderer);
 	}
@@ -215,7 +215,7 @@
 	protected T convertChoiceIdToChoice(String id)
 	{
 		final List<? extends T> choices = getChoices();
-		final IChoiceRenderer<T> renderer = getChoiceRenderer();
+		final IChoiceRenderer<? super T> renderer = getChoiceRenderer();
 		for (int index = 0; index < choices.size(); index++)
 		{
 			// Get next choice
Index: src/main/java/org/apache/wicket/markup/html/form/ListChoice.java
===================================================================
--- src/main/java/org/apache/wicket/markup/html/form/ListChoice.java	(revision 782725)
+++ src/main/java/org/apache/wicket/markup/html/form/ListChoice.java	(working copy)
@@ -90,7 +90,8 @@
 	 * @see org.apache.wicket.markup.html.form.AbstractChoice#AbstractChoice(String,
 	 *      List,IChoiceRenderer)
 	 */
-	public ListChoice(final String id, final List<? extends T> choices, final IChoiceRenderer<T> renderer)
+	public ListChoice(final String id, final List<? extends T> choices,
+		final IChoiceRenderer<? super T> renderer)
 	{
 		this(id, null, choices, renderer, defaultMaxRows);
 	}
@@ -139,7 +140,7 @@
 	 * @see DropDownChoice#DropDownChoice(String, IModel, List)
 	 */
 	public ListChoice(final String id, final IModel<T> model, final List<? extends T> choices,
-		final IChoiceRenderer<T> renderer)
+		final IChoiceRenderer<? super T> renderer)
 	{
 		this(id, model, choices, renderer, defaultMaxRows);
 	}
@@ -158,7 +159,7 @@
 	 * @see DropDownChoice#DropDownChoice(String, IModel, List)
 	 */
 	public ListChoice(final String id, final IModel<T> model, final List<? extends T> choices,
-		final IChoiceRenderer<T> renderer, final int maxRows)
+		final IChoiceRenderer<? super T> renderer, final int maxRows)
 	{
 		super(id, model, choices, renderer);
 		this.maxRows = maxRows;
@@ -184,7 +185,8 @@
 	 * @see org.apache.wicket.markup.html.form.AbstractChoice#AbstractChoice(String,
 	 *      IModel,IChoiceRenderer)
 	 */
-	public ListChoice(String id, IModel<? extends List<? extends T>> choices, IChoiceRenderer<T> renderer)
+	public ListChoice(String id, IModel<? extends List<? extends T>> choices,
+		IChoiceRenderer<? super T> renderer)
 	{
 		this(id, null, choices, renderer, defaultMaxRows);
 	}
@@ -195,7 +197,7 @@
 	 *      IModel,IChoiceRenderer)
 	 */
 	public ListChoice(String id, IModel<T> model, IModel<? extends List<? extends T>> choices,
-		IChoiceRenderer<T> renderer)
+		IChoiceRenderer<? super T> renderer)
 	{
 		this(id, model, choices, renderer, defaultMaxRows);
 	}
@@ -210,7 +212,7 @@
 	 *      IModel,IChoiceRenderer)
 	 */
 	public ListChoice(String id, IModel<T> model, IModel<? extends List<? extends T>> choices,
-		IChoiceRenderer<T> renderer, int maxRows)
+		IChoiceRenderer<? super T> renderer, int maxRows)
 	{
 		super(id, model, choices, renderer);
 		this.maxRows = maxRows;
Index: src/main/java/org/apache/wicket/markup/html/form/ListMultipleChoice.java
===================================================================
--- src/main/java/org/apache/wicket/markup/html/form/ListMultipleChoice.java	(revision 782725)
+++ src/main/java/org/apache/wicket/markup/html/form/ListMultipleChoice.java	(working copy)
@@ -114,7 +114,7 @@
 	 *      List,IChoiceRenderer)
 	 */
 	public ListMultipleChoice(final String id, final List<? extends T> choices,
-		final IChoiceRenderer<T> renderer)
+		final IChoiceRenderer<? super T> renderer)
 	{
 		super(id, choices, renderer);
 	}
@@ -131,8 +131,8 @@
 	 * @see org.apache.wicket.markup.html.form.AbstractChoice#AbstractChoice(String, IModel,
 	 *      List,IChoiceRenderer)
 	 */
-	public ListMultipleChoice(final String id, IModel<Collection<T>> object, final List<? extends T> choices,
-		final IChoiceRenderer<T> renderer)
+	public ListMultipleChoice(final String id, IModel<Collection<T>> object,
+		final List<? extends T> choices, final IChoiceRenderer<? super T> renderer)
 	{
 		super(id, object, choices, renderer);
 	}
@@ -159,7 +159,7 @@
 	 *      IModel,IChoiceRenderer)
 	 */
 	public ListMultipleChoice(String id, IModel<? extends List<? extends T>> choices,
-		IChoiceRenderer<T> renderer)
+		IChoiceRenderer<? super T> renderer)
 	{
 		super(id, choices, renderer);
 	}
@@ -170,7 +170,7 @@
 	 *      IModel,IChoiceRenderer)
 	 */
 	public ListMultipleChoice(String id, IModel<Collection<T>> model,
-		IModel<? extends List<? extends T>> choices, IChoiceRenderer<T> renderer)
+		IModel<? extends List<? extends T>> choices, IChoiceRenderer<? super T> renderer)
 	{
 		super(id, model, choices, renderer);
 	}
Index: src/main/java/org/apache/wicket/markup/html/form/DropDownChoice.java
===================================================================
--- src/main/java/org/apache/wicket/markup/html/form/DropDownChoice.java	(revision 782725)
+++ src/main/java/org/apache/wicket/markup/html/form/DropDownChoice.java	(working copy)
@@ -89,7 +89,7 @@
 	 *      List,IChoiceRenderer)
 	 */
 	public DropDownChoice(final String id, final List<? extends T> data,
-		final IChoiceRenderer<T> renderer)
+		final IChoiceRenderer<? super T> renderer)
 	{
 		super(id, data, renderer);
 	}
@@ -107,7 +107,7 @@
 	 *      IChoiceRenderer)
 	 */
 	public DropDownChoice(final String id, IModel<T> model, final List<? extends T> data,
-		final IChoiceRenderer<T> renderer)
+		final IChoiceRenderer<? super T> renderer)
 	{
 		super(id, model, data, renderer);
 	}
@@ -132,7 +132,8 @@
 	 * @see org.apache.wicket.markup.html.form.AbstractChoice#AbstractChoice(String,
 	 *      IModel,IChoiceRenderer)
 	 */
-	public DropDownChoice(String id, IModel<? extends List<? extends T>> choices, IChoiceRenderer<T> renderer)
+	public DropDownChoice(String id, IModel<? extends List<? extends T>> choices,
+		IChoiceRenderer<? super T> renderer)
 	{
 		super(id, choices, renderer);
 	}
@@ -143,7 +144,7 @@
 	 *      IModel,IChoiceRenderer)
 	 */
 	public DropDownChoice(String id, IModel<T> model, IModel<? extends List<? extends T>> choices,
-		IChoiceRenderer<T> renderer)
+		IChoiceRenderer<? super T> renderer)
 	{
 		super(id, model, choices, renderer);
 	}
Index: src/main/java/org/apache/wicket/markup/html/form/RadioChoice.java
===================================================================
--- src/main/java/org/apache/wicket/markup/html/form/RadioChoice.java	(revision 782725)
+++ src/main/java/org/apache/wicket/markup/html/form/RadioChoice.java	(working copy)
@@ -181,7 +181,8 @@
 	 * @see org.apache.wicket.markup.html.form.AbstractChoice#AbstractChoice(String,
 	 *      List,IChoiceRenderer)
 	 */
-	public RadioChoice(final String id, final List<? extends T> choices, final IChoiceRenderer<T> renderer)
+	public RadioChoice(final String id, final List<? extends T> choices,
+		final IChoiceRenderer<? super T> renderer)
 	{
 		super(id, choices, renderer);
 	}
@@ -219,7 +220,7 @@
 	 *      List,IChoiceRenderer)
 	 */
 	public RadioChoice(final String id, IModel<T> model, final List<? extends T> choices,
-		final IChoiceRenderer<T> renderer)
+		final IChoiceRenderer<? super T> renderer)
 	{
 		super(id, model, choices, renderer);
 	}
@@ -269,7 +270,8 @@
 	 *      IModel,IChoiceRenderer)
 	 * @see org.apache.wicket.Component#Component(String)
 	 */
-	public RadioChoice(String id, IModel<? extends List<? extends T>> choices, IChoiceRenderer<T> renderer)
+	public RadioChoice(String id, IModel<? extends List<? extends T>> choices,
+		IChoiceRenderer<? super T> renderer)
 	{
 		super(id, choices, renderer);
 	}
@@ -291,7 +293,7 @@
 	 *      IModel,IChoiceRenderer)
 	 */
 	public RadioChoice(String id, IModel<T> model, IModel<? extends List<? extends T>> choices,
-		IChoiceRenderer<T> renderer)
+		IChoiceRenderer<? super T> renderer)
 	{
 		super(id, model, choices, renderer);
 	}
Index: src/main/java/org/apache/wicket/markup/html/form/AbstractChoice.java
===================================================================
--- src/main/java/org/apache/wicket/markup/html/form/AbstractChoice.java	(revision 782725)
+++ src/main/java/org/apache/wicket/markup/html/form/AbstractChoice.java	(working copy)
@@ -51,7 +51,7 @@
 	private IModel<? extends List<? extends E>> choices;
 
 	/** The renderer used to generate display/id values for the objects. */
-	private IChoiceRenderer<E> renderer;
+	private IChoiceRenderer<? super E> renderer;
 
 	/**
 	 * Constructor.
@@ -91,7 +91,7 @@
 	 * @see org.apache.wicket.Component#Component(String)
 	 */
 	public AbstractChoice(final String id, final List<? extends E> choices,
-		final IChoiceRenderer<E> renderer)
+		final IChoiceRenderer<? super E> renderer)
 	{
 		this(id, new WildcardListModel<E>(choices), renderer);
 	}
@@ -126,7 +126,7 @@
 	 * @see org.apache.wicket.Component#Component(String, IModel)
 	 */
 	public AbstractChoice(final String id, IModel<T> model, final List<? extends E> choices,
-		final IChoiceRenderer<E> renderer)
+		final IChoiceRenderer<? super E> renderer)
 	{
 		this(id, model, new WildcardListModel<E>(choices), renderer);
 	}
@@ -157,7 +157,7 @@
 	 * @see org.apache.wicket.Component#Component(String)
 	 */
 	public AbstractChoice(final String id, final IModel<? extends List<? extends E>> choices,
-		final IChoiceRenderer<E> renderer)
+		final IChoiceRenderer<? super E> renderer)
 	{
 		super(id);
 		this.choices = wrap(choices);
@@ -194,7 +194,7 @@
 	 * @see org.apache.wicket.Component#Component(String, IModel)
 	 */
 	public AbstractChoice(final String id, IModel<T> model,
-		final IModel<? extends List<? extends E>> choices, final IChoiceRenderer<E> renderer)
+		final IModel<? extends List<? extends E>> choices, final IChoiceRenderer<? super E> renderer)
 	{
 		super(id, model);
 		this.choices = wrap(choices);
@@ -260,7 +260,7 @@
 	/**
 	 * @return The IChoiceRenderer used for rendering the data objects
 	 */
-	public final IChoiceRenderer<E> getChoiceRenderer()
+	public final IChoiceRenderer<? super E> getChoiceRenderer()
 	{
 		return renderer;
 	}
@@ -271,7 +271,7 @@
 	 * @param renderer
 	 * @return this for chaining
 	 */
-	public final AbstractChoice<T, E> setChoiceRenderer(IChoiceRenderer<E> renderer)
+	public final AbstractChoice<T, E> setChoiceRenderer(IChoiceRenderer<? super E> renderer)
 	{
 		if (renderer == null)
 		{

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to