8054360: Refine generification of javax.swing
authordarcy
Fri, 15 Aug 2014 11:33:13 -0700
changeset 26351 4050cc242edf
parent 26350 3fb50df97199
child 26352 fa12363e21d6
8054360: Refine generification of javax.swing Reviewed-by: anthony, alexsch, dlsmith
jdk/src/share/classes/javax/swing/JSlider.java
jdk/src/share/classes/javax/swing/JTable.java
jdk/src/share/classes/javax/swing/plaf/basic/BasicSliderUI.java
jdk/src/share/classes/javax/swing/plaf/synth/SynthSliderUI.java
jdk/src/share/classes/javax/swing/table/DefaultTableModel.java
jdk/src/share/classes/javax/swing/tree/DefaultMutableTreeNode.java
jdk/src/share/classes/javax/swing/tree/TreeNode.java
jdk/src/share/classes/sun/tools/jconsole/inspector/TableSorter.java
--- a/jdk/src/share/classes/javax/swing/JSlider.java	Fri Aug 15 13:02:46 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/JSlider.java	Fri Aug 15 11:33:13 2014 -0700
@@ -138,7 +138,7 @@
     /**
      * {@code Dictionary} of what labels to draw at which values
      */
-    private Dictionary<Integer, JComponent> labelTable;
+    private Dictionary<Integer, ? extends JComponent> labelTable;
 
 
     /**
@@ -773,7 +773,7 @@
         }
 
         // Check that there is a label with such image
-        Enumeration<JComponent> elements = labelTable.elements();
+        Enumeration<? extends JComponent> elements = labelTable.elements();
 
         while (elements.hasMoreElements()) {
             JComponent component = elements.nextElement();
@@ -797,7 +797,7 @@
      * @return the <code>Dictionary</code> containing labels and
      *    where to draw them
      */
-    public Dictionary<Integer, JComponent> getLabelTable() {
+    public Dictionary<Integer, ? extends JComponent> getLabelTable() {
 /*
         if ( labelTable == null && getMajorTickSpacing() > 0 ) {
             setLabelTable( createStandardLabels( getMajorTickSpacing() ) );
@@ -830,8 +830,8 @@
      *    attribute: visualUpdate true
      *  description: Specifies what labels will be drawn for any given value.
      */
-    public void setLabelTable( Dictionary<Integer, JComponent> labels ) {
-        Dictionary<Integer, JComponent> oldTable = labelTable;
+    public void setLabelTable( Dictionary<Integer, ? extends JComponent> labels ) {
+        Dictionary<Integer, ? extends JComponent> oldTable = labelTable;
         labelTable = labels;
         updateLabelUIs();
         firePropertyChange("labelTable", oldTable, labelTable );
@@ -852,7 +852,7 @@
      * @see JComponent#updateUI
      */
     protected void updateLabelUIs() {
-        Dictionary<Integer, JComponent> labelTable = getLabelTable();
+        Dictionary<Integer, ? extends JComponent> labelTable = getLabelTable();
 
         if (labelTable == null) {
             return;
@@ -866,9 +866,9 @@
     }
 
     private void updateLabelSizes() {
-        Dictionary<Integer, JComponent> labelTable = getLabelTable();
+        Dictionary<Integer, ? extends JComponent> labelTable = getLabelTable();
         if (labelTable != null) {
-            Enumeration<JComponent> labels = labelTable.elements();
+            Enumeration<? extends JComponent> labels = labelTable.elements();
             while (labels.hasMoreElements()) {
                 JComponent component = labels.nextElement();
                 component.setSize(component.getPreferredSize());
@@ -1017,7 +1017,7 @@
 
         SmartHashtable table = new SmartHashtable( increment, start );
 
-        Dictionary<Integer, JComponent> labelTable = getLabelTable();
+        Dictionary<Integer, ? extends JComponent> labelTable = getLabelTable();
 
         if (labelTable != null && (labelTable instanceof PropertyChangeListener)) {
             removePropertyChangeListener((PropertyChangeListener) labelTable);
--- a/jdk/src/share/classes/javax/swing/JTable.java	Fri Aug 15 13:02:46 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/JTable.java	Fri Aug 15 11:33:13 2014 -0700
@@ -670,7 +670,8 @@
      * @param rowData           the data for the new table
      * @param columnNames       names of each column
      */
-    public JTable(Vector<Vector<Object>> rowData, Vector<Object> columnNames) {
+    @SuppressWarnings("rawtypes")
+    public JTable(Vector<? extends Vector> rowData, Vector<?> columnNames) {
         this(new DefaultTableModel(rowData, columnNames));
     }
 
--- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicSliderUI.java	Fri Aug 15 13:02:46 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicSliderUI.java	Fri Aug 15 11:33:13 2014 -0700
@@ -397,10 +397,10 @@
     protected boolean labelsHaveSameBaselines() {
         if (!checkedLabelBaselines) {
             checkedLabelBaselines = true;
-            Dictionary<?, JComponent> dictionary = slider.getLabelTable();
+            Dictionary<Integer, ? extends JComponent> dictionary = slider.getLabelTable();
             if (dictionary != null) {
                 sameLabelBaselines = true;
-                Enumeration<JComponent> elements = dictionary.elements();
+                Enumeration<? extends JComponent> elements = dictionary.elements();
                 int baseline = -1;
                 while (elements.hasMoreElements()) {
                     JComponent label = elements.nextElement();
@@ -758,7 +758,7 @@
     }
 
     protected int getWidthOfWidestLabel() {
-        Dictionary<?, JComponent> dictionary = slider.getLabelTable();
+        Dictionary<?, ? extends JComponent> dictionary = slider.getLabelTable();
         int widest = 0;
         if ( dictionary != null ) {
             Enumeration<?> keys = dictionary.keys();
@@ -771,7 +771,7 @@
     }
 
     protected int getHeightOfTallestLabel() {
-        Dictionary<?, JComponent> dictionary = slider.getLabelTable();
+        Dictionary<?, ? extends JComponent> dictionary = slider.getLabelTable();
         int tallest = 0;
         if ( dictionary != null ) {
             Enumeration<?> keys = dictionary.keys();
@@ -876,7 +876,7 @@
      * @since 1.6
      */
     protected Integer getLowestValue() {
-        Dictionary<Integer, JComponent> dictionary = slider.getLabelTable();
+        Dictionary<Integer, ? extends JComponent> dictionary = slider.getLabelTable();
 
         if (dictionary == null) {
             return null;
@@ -1134,7 +1134,7 @@
     public void paintLabels( Graphics g ) {
         Rectangle labelBounds = labelRect;
 
-        Dictionary<Integer, JComponent> dictionary = slider.getLabelTable();
+        Dictionary<Integer, ? extends JComponent> dictionary = slider.getLabelTable();
         if ( dictionary != null ) {
             Enumeration<Integer> keys = dictionary.keys();
             int minValue = slider.getMinimum();
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthSliderUI.java	Fri Aug 15 13:02:46 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthSliderUI.java	Fri Aug 15 11:33:13 2014 -0700
@@ -392,7 +392,7 @@
                 trackRect.x = insetCache.left;
                 trackRect.width = contentRect.width;
 
-                Dictionary<Integer, JComponent> dictionary = slider.getLabelTable();
+                Dictionary<Integer, ? extends JComponent> dictionary = slider.getLabelTable();
                 if (dictionary != null) {
                     int minValue = slider.getMinimum();
                     int maxValue = slider.getMaximum();
--- a/jdk/src/share/classes/javax/swing/table/DefaultTableModel.java	Fri Aug 15 13:02:46 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/table/DefaultTableModel.java	Fri Aug 15 11:33:13 2014 -0700
@@ -70,10 +70,18 @@
      * The <code>Vector</code> of <code>Vectors</code> of
      * <code>Object</code> values.
      */
-    protected Vector<Vector<Object>>    dataVector;
+    @SuppressWarnings("rawtypes")
+    protected Vector<Vector>    dataVector;
 
     /** The <code>Vector</code> of column identifiers. */
-    protected Vector<Object>    columnIdentifiers;
+    @SuppressWarnings("rawtypes")
+    protected Vector    columnIdentifiers;
+    // Unfortunately, for greater source compatibility the inner-most
+    // Vector in the two fields above is being left raw. The Vector is
+    // read as well as written so using Vector<?> is not suitable and
+    // using Vector<Object> (without adding copying of input Vectors),
+    // would disallow existing code that used, say, a Vector<String>
+    // as an input parameter.
 
 //
 // Constructors
@@ -121,7 +129,7 @@
      * @see #setDataVector
      * @see #setValueAt
      */
-    public DefaultTableModel(Vector<Object> columnNames, int rowCount) {
+    public DefaultTableModel(Vector<?> columnNames, int rowCount) {
         setDataVector(newVector(rowCount), columnNames);
     }
 
@@ -156,7 +164,8 @@
      * @see #getDataVector
      * @see #setDataVector
      */
-    public DefaultTableModel(Vector<Vector<Object>> data, Vector<Object> columnNames) {
+    @SuppressWarnings("rawtypes")
+    public DefaultTableModel(Vector<? extends Vector> data, Vector<?> columnNames) {
         setDataVector(data, columnNames);
     }
 
@@ -191,7 +200,8 @@
      * @see #newRowsAdded
      * @see #setDataVector
      */
-    public Vector<Vector<Object>> getDataVector() {
+    @SuppressWarnings("rawtypes")
+    public Vector<Vector> getDataVector() {
         return dataVector;
     }
 
@@ -219,9 +229,10 @@
      * @param   columnIdentifiers     the names of the columns
      * @see #getDataVector
      */
-    public void setDataVector(Vector<Vector<Object>> dataVector,
-                              Vector<Object> columnIdentifiers) {
-        this.dataVector = nonNullVector(dataVector);
+    @SuppressWarnings({"rawtypes", "unchecked"})
+    public void setDataVector(Vector<? extends Vector> dataVector,
+                              Vector<?> columnIdentifiers) {
+        this.dataVector = nonNullVector((Vector<Vector>)dataVector);
         this.columnIdentifiers = nonNullVector(columnIdentifiers);
         justifyRows(0, getRowCount());
         fireTableStructureChanged();
@@ -267,7 +278,7 @@
             if (dataVector.elementAt(i) == null) {
                 dataVector.setElementAt(new Vector<>(), i);
             }
-            ((Vector)dataVector.elementAt(i)).setSize(getColumnCount());
+            dataVector.elementAt(i).setSize(getColumnCount());
         }
     }
 
@@ -350,7 +361,7 @@
      *
      * @param   rowData          optional data of the row being added
      */
-    public void addRow(Vector<Object> rowData) {
+    public void addRow(Vector<?> rowData) {
         insertRow(getRowCount(), rowData);
     }
 
@@ -374,7 +385,7 @@
      * @param   rowData         optional data of the row being added
      * @exception  ArrayIndexOutOfBoundsException  if the row was invalid
      */
-    public void insertRow(int row, Vector<Object> rowData) {
+    public void insertRow(int row, Vector<?> rowData) {
         dataVector.insertElementAt(rowData, row);
         justifyRows(row, row+1);
         fireTableRowsInserted(row, row);
@@ -484,7 +495,7 @@
      *                          to zero columns
      * @see #setNumRows
      */
-    public void setColumnIdentifiers(Vector<Object> columnIdentifiers) {
+    public void setColumnIdentifiers(Vector<?> columnIdentifiers) {
         setDataVector(dataVector, columnIdentifiers);
     }
 
@@ -550,7 +561,8 @@
      * @param   columnName the identifier of the column being added
      * @param   columnData       optional data of the column being added
      */
-    public void addColumn(Object columnName, Vector<Object> columnData) {
+    @SuppressWarnings("unchecked") // Adding element to raw columnIdentifiers
+    public void addColumn(Object columnName, Vector<?> columnData) {
         columnIdentifiers.addElement(columnName);
         if (columnData != null) {
             int columnSize = columnData.size();
@@ -652,6 +664,7 @@
      *               column was given
      */
     public Object getValueAt(int row, int column) {
+        @SuppressWarnings("unchecked")
         Vector<Object> rowVector = dataVector.elementAt(row);
         return rowVector.elementAt(column);
     }
@@ -668,6 +681,7 @@
      *               column was given
      */
     public void setValueAt(Object aValue, int row, int column) {
+        @SuppressWarnings("unchecked")
         Vector<Object> rowVector = dataVector.elementAt(row);
         rowVector.setElementAt(aValue, column);
         fireTableCellUpdated(row, column);
--- a/jdk/src/share/classes/javax/swing/tree/DefaultMutableTreeNode.java	Fri Aug 15 13:02:46 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/tree/DefaultMutableTreeNode.java	Fri Aug 15 11:33:13 2014 -0700
@@ -1317,7 +1317,7 @@
     }
 
     private final class PreorderEnumeration implements Enumeration<TreeNode> {
-        private final Stack<Enumeration<TreeNode>> stack = new Stack<>();
+        private final Stack<Enumeration<? extends TreeNode>> stack = new Stack<>();
 
         public PreorderEnumeration(TreeNode rootNode) {
             super();
@@ -1331,10 +1331,9 @@
         }
 
         public TreeNode nextElement() {
-            Enumeration<TreeNode> enumer = stack.peek();
+            Enumeration<? extends TreeNode> enumer = stack.peek();
             TreeNode    node = enumer.nextElement();
-            @SuppressWarnings("unchecked")
-            Enumeration<TreeNode> children = node.children();
+            Enumeration<? extends TreeNode> children = node.children();
 
             if (!enumer.hasMoreElements()) {
                 stack.pop();
@@ -1351,7 +1350,7 @@
 
     final class PostorderEnumeration implements Enumeration<TreeNode> {
         protected TreeNode root;
-        protected Enumeration<TreeNode> children;
+        protected Enumeration<? extends TreeNode> children;
         protected Enumeration<TreeNode> subtree;
 
         public PostorderEnumeration(TreeNode rootNode) {
--- a/jdk/src/share/classes/javax/swing/tree/TreeNode.java	Fri Aug 15 13:02:46 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/tree/TreeNode.java	Fri Aug 15 11:33:13 2014 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -99,5 +99,5 @@
      *
      * @return              the children of the receiver as an {@code Enumeration}
      */
-    Enumeration<TreeNode> children();
+    Enumeration<? extends TreeNode> children();
 }
--- a/jdk/src/share/classes/sun/tools/jconsole/inspector/TableSorter.java	Fri Aug 15 13:02:46 2014 +0400
+++ b/jdk/src/share/classes/sun/tools/jconsole/inspector/TableSorter.java	Fri Aug 15 11:33:13 2014 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -146,7 +146,7 @@
         // update row heights in XMBeanAttributes (required by expandable cells)
         if (attrs != null) {
             for (int i = 0; i < getRowCount(); i++) {
-                Vector<?> data = (Vector) dataVector.elementAt(i);
+                Vector<?> data = dataVector.elementAt(i);
                 attrs.updateRowHeight(data.elementAt(1), i);
             }
         }
@@ -217,17 +217,17 @@
             }
     }
 
-    private Vector<Object> getRow(int row) {
+    private Vector<?> getRow(int row) {
         return dataVector.elementAt(row);
     }
 
     @SuppressWarnings("unchecked")
-    private void setRow(Vector<Object> data, int row) {
+    private void setRow(Vector<?> data, int row) {
         dataVector.setElementAt(data,row);
     }
 
     private void swap(int i, int j, int column) {
-        Vector<Object> data = getRow(i);
+        Vector<?> data = getRow(i);
         setRow(getRow(j),i);
         setRow(data,j);