Generics bug concerning IChoiceRenderers

View: New views
3 Messages — Rating Filter:   Alert me  

Generics bug concerning IChoiceRenderers

by Max Bowsher-5 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

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.



signature.asc (204 bytes) Download Attachment

[PATCH] Re: Generics bug concerning IChoiceRenderers

by Max Bowsher-5 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

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)
  {


signature.asc (204 bytes) Download Attachment

Re: [PATCH] Re: Generics bug concerning IChoiceRenderers

by Alexandru Objelean :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

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)
  {