Hello,

As noted by Sergey, the recently pushed changes for

    JDK-8054360: Refine generification of javax.swing

cause one of the files in SwingSet2 to not build, breaking the combined open + closed JDK build.

To remedy this situation, at least in the short term, please review the proposed changes for

     JDK-8055254: Address source incompatability of JSlider generification
    http://cr.openjdk.java.net/~darcy/8055254.0/

In brief, the label table information in JSlider is reverted to be a raw Dictionary rather than

    * A Dictionary<Integer, ? extends JComponent> as under 8054360
* A Dictionary<Integer, JComponent> as under JDK-8043550 (earlier swing generification)

(The usage patterns of the label table from the get/set methods seems to include modifying the returned table, which is problematic if wildcards are used.)

For a bit more information, here is a diff of the non-javadoc changes between the pre JDK-8043550 state of the slider files and the proposed changes:

diff JSlider.java ../jdk/src/share/classes/javax/swing/JSlider.java
140a141
>     @SuppressWarnings("rawtypes")
142c143,145
<
---
>     // For better source compatibility, the labelTable field and
>     // associated getter and setter methods are being left as raw
>     // types.
772c779
<         Enumeration elements = labelTable.elements();
---
>         Enumeration<?> elements = labelTable.elements();
795a803
>     @SuppressWarnings("rawtypes")
828a837
>     @SuppressWarnings("rawtypes")
850a860
>         @SuppressWarnings("rawtypes")
856c866
<         Enumeration labels = labelTable.keys();
---
>         Enumeration<?> labels = labelTable.keys();
864a875
>         @SuppressWarnings("rawtypes")
867c878
<             Enumeration labels = labelTable.elements();
---
>             Enumeration<?> labels = labelTable.elements();
897c908
<     public Hashtable createStandardLabels( int increment ) {
---
> public Hashtable<Integer, JComponent> createStandardLabels( int increment ) {
925c936
<     public Hashtable createStandardLabels( int increment, int start ) {
---
> public Hashtable<Integer, JComponent> createStandardLabels( int increment, int start ) {
934c945
< class SmartHashtable extends Hashtable<Object, Object> implements PropertyChangeListener {
---
> class SmartHashtable extends Hashtable<Integer, JComponent> implements PropertyChangeListener {
981,982c992,993
<                     Enumeration keys = getLabelTable().keys();
< Hashtable<Object, Object> hashtable = new Hashtable<Object, Object>();
---
>                     Enumeration<?> keys = getLabelTable().keys();
> Hashtable<Integer, JComponent> hashtable = new Hashtable<>();
986,987c997,998
<                         Object key = keys.nextElement();
<                         Object value = labelTable.get(key);
---
>                         Integer key = (Integer) keys.nextElement();
> JComponent value = (JComponent) labelTable.get(key);
999c1010
<                         Object key = keys.nextElement();
---
>                         Integer key = (Integer) keys.nextElement();
1015a1027
>         @SuppressWarnings("rawtypes")
1524d1535
<

diff BasicSliderUI.java ../jdk/src/share/classes/javax/swing/plaf/basic/BasicSliderUI.java
399a400
>             @SuppressWarnings("rawtypes")
403c404
<                 Enumeration elements = dictionary.elements();
---
>                 Enumeration<?> elements = dictionary.elements();
755a762
>         @SuppressWarnings("rawtypes")
759c766
<             Enumeration keys = dictionary.keys();
---
>             Enumeration<?> keys = dictionary.keys();
768a776
>         @SuppressWarnings("rawtypes")
772c780
<             Enumeration keys = dictionary.keys();
---
>             Enumeration<?> keys = dictionary.keys();
844a853
>         @SuppressWarnings("rawtypes")
851c860
<         Enumeration keys = dictionary.keys();
---
>         Enumeration<?> keys = dictionary.keys();
873a883
>         @SuppressWarnings("rawtypes")
880c890
<         Enumeration keys = dictionary.keys();
---
>         Enumeration<?> keys = dictionary.keys();
1123a1142
>         @SuppressWarnings("rawtypes")
1126c1145
<             Enumeration keys = dictionary.keys();
---
>             Enumeration<?> keys = dictionary.keys();

diff SynthSliderUI.java ../jdk/src/share/classes/javax/swing/plaf/synth/SynthSliderUI.java | more
2c2
< * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
---
> * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
394c394,395
<
---
>
>                 @SuppressWarnings("rawtypes")
405c406
<                     for (Enumeration keys = dictionary.keys();
---
>                     for (Enumeration<?> keys = dictionary.keys();

The raw and unchecked warnings are now enabled in the build of the JDK so the changes for 8055254 must preserve that property, which is largely done by suppressing some warnings and judicious use of some wildcards on local variables.

Thanks,

-Joe

Reply via email to