*ping*

Any other comments here?

Thanks,

-Joe

On 08/07/2014 07:20 PM, Joe Darcy wrote:
Hello,

Please review my changes for

    JDK-8054360: Refine generification of javax.swing h
http://cr.openjdk.java.net/~darcy/8054360.3/

Full patch below.

This resolves many of the source incompatibility exemplars Jan Lahoda found in a corpus of programs using swing.

A few comments on the changes.

It seems many existing implementations of the TreeNode interface have a covariant override of the old raw

    Enumeration children();

method which returns an enumeration of the specific TreeNode implementation type. The revised generification of

    Enumeration<? extends TreeNode> children();

allows those existing implementations to still compile. This is a lower-impact way of allowing those types to still compile compared to trying to add a type variable to TreeNode.

After some expert generics advice from Dan Smith, I but together a different generification of

    src/share/classes/javax/swing/table/DefaultTableModel.java

which has better source compatibility. Quoting from the changes:

  73     @SuppressWarnings("rawtypes")
  74     protected Vector<Vector>    dataVector;
  75
  76     /** The <code>Vector</code> of column identifiers. */
  77     @SuppressWarnings("rawtypes")
  78     protected Vector    columnIdentifiers;
79 // Unfortunately, for greater source compatibility the inner-most 80 // Vector in the two fields above is being left raw. The Vector is 81 // read as well as written so using Vector<?> is not suitable and 82 // using Vector<Object> (without adding copying of input Vectors),
  83     // would disallow existing code that used, say, a Vector<String>
  84     // as an input parameter.

The setter methods used for these fields are changes to have parameters of type Vector<?> and Vector<? extends Vector>, respectively.

The type Vector<? extends Vector> is the most general type which captures the implicit constraint of the dataVector field: it is a Vector of other Vectors. (It would probably be possible to update dataVector to the somewhat more general Vector<List>, but that would require changes to the code in other methods of the class.)

The changes in src/share/classes/sun/tools/jconsole/inspector/TableSorter.java change the code back to how it was before the swing generification changes went in based on the changes to DefaultTableModel.

Once the exact generification is settled, I'll file the internal ccc paperwork.

Early feedback on using this revised generification on swing code is welcome!

Thanks,

-Joe


Reply via email to