<Swing Dev> JDK 9 RFR of JDK-8055254: Address source incompatability of JSlider generification
Joe Darcy
joe.darcy at oracle.com
Sun Aug 17 22:53:53 UTC 2014
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
More information about the swing-dev
mailing list