You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@wicket.apache.org by Max Bowsher <ma...@f2s.com> on 2009/06/10 15:27:09 UTC

Generics bug concerning IChoiceRenderers

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.


Max.


Re: [PATCH] Re: Generics bug concerning IChoiceRenderers

Posted by Alex Objelean <al...@yahoo.com>.
Add a Jira Issue with patch attached...



Max Bowsher-5 wrote:
> 
> 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)
>  		{
> 
>  
> 

-- 
View this message in context: http://www.nabble.com/Generics-bug-concerning-IChoiceRenderers-tp23962343p23963382.html
Sent from the Wicket - Dev mailing list archive at Nabble.com.


[PATCH] Re: Generics bug concerning IChoiceRenderers

Posted by Max Bowsher <ma...@f2s.com>.
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.