<Swing Dev> JDK 9 RFR of JDK-8054360: Refine generification of javax.swing

Joe Darcy joe.darcy at oracle.com
Sat Aug 16 22:22:11 UTC 2014


Hi Sergey,

On 08/16/2014 12:38 PM, Sergey Bylokhov wrote:
> Hello. Joe.
> This change broke the full image build of the client ws.

Oh no!

Sorry about that. I'll look into an immediate fix. A longer term fix 
will probably require some further changes to the swing generification, 
possibly making JSlider raw again.

-Joe

>
> /repool/java_re/builds/workspace/9-2-build-solaris-sparcv9/jdk9-client/1141/jdk/src/closed/share/demo/jfc/SwingSet2/SliderDemo.java:167: 
> error: incompatible types: JLabel cannot be converted to CAP#1
>         s.getLabelTable().put(new Integer(11), new JLabel(new 
> Integer(11).toString(), JLabel.CENTER));
>                                                ^
>   where CAP#1 is a fresh type-variable:
>     CAP#1 extends JComponent from capture of ? extends JComponent
>
>
> On 13.08.2014 2:51, Joe Darcy wrote:
>> *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
>>>
>>
>
>




More information about the swing-dev mailing list