Hi, Joe.
The fix looks good.

On 10.01.2015 3:23, Joseph D. Darcy wrote:
Hello,

The previously proposed fix for

    JDK-8055059: JDK9b22 public API exposes package private classes

was rejected during code review:

http://mail.openjdk.java.net/pipermail/swing-dev/2014-August/003829.html
http://mail.openjdk.java.net/pipermail/swing-dev/2014-August/003830.html

Here is a new proposed fix that reverts the Vector<UndoPosRef> variable and values to a raw Vector to avoid exposing the UndoPosRef types more widely:

    http://cr.openjdk.java.net/~darcy/8055059.1/

Patch inline below.

The code as amended still compiles without rawtypes or unchecked warnings.

Thanks,

-Joe

--- old/src/java.desktop/share/classes/javax/swing/text/GapContent.java 2015-01-09 14:48:54.394781325 -0800 +++ new/src/java.desktop/share/classes/javax/swing/text/GapContent.java 2015-01-09 14:48:54.122781325 -0800
@@ -710,8 +710,9 @@
      * @param length the length &gt;= 0
      * @return the set of instances
      */
- protected Vector<UndoPosRef> getPositionsInRange(Vector<UndoPosRef> v, - int offset, int length) { + @SuppressWarnings({"rawtypes", "unchecked"}) // UndoPosRef type cannot be exposed
+    protected Vector getPositionsInRange(Vector v,
+                                         int offset, int length) {
         int endOffset = offset + length;
         int startIndex;
         int endIndex;
@@ -758,7 +759,8 @@
      *
      * @param positions the UndoPosRef instances to reset
      */
- protected void updateUndoPositions(Vector<UndoPosRef> positions, int offset,
+    @SuppressWarnings("rawtypes") // UndoPosRef type cannot be exposed
+    protected void updateUndoPositions(Vector positions, int offset,
                                        int length) {
         // Find the indexs of the end points.
         int endOffset = offset + length;
@@ -775,7 +777,7 @@

         // Reset the location of the refenences.
for(int counter = positions.size() - 1; counter >= 0; counter--) {
-            UndoPosRef ref = positions.elementAt(counter);
+            UndoPosRef ref = (UndoPosRef)positions.elementAt(counter);
             ref.resetLocation(endOffset, g1);
         }
// We have to resort the marks in the range startIndex to endIndex.
@@ -902,7 +904,8 @@
         protected String string;
         /** An array of instances of UndoPosRef for the Positions in the
          * range that was removed, valid after undo. */
-        protected Vector<UndoPosRef> posRefs;
+ @SuppressWarnings("rawtypes") // UndoPosRef type cannot be exposed
+        protected Vector posRefs;
     } // GapContent.InsertUndo


@@ -911,6 +914,7 @@
      */
     @SuppressWarnings("serial") // JDK-implementation class
     class RemoveUndo extends AbstractUndoableEdit {
+        @SuppressWarnings("unchecked")
         protected RemoveUndo(int offset, String string) {
             super();
             this.offset = offset;
@@ -934,6 +938,7 @@
             }
         }

+        @SuppressWarnings("unchecked")
         public void redo() throws CannotRedoException {
             super.redo();
             try {
--- old/src/java.desktop/share/classes/javax/swing/text/StringContent.java 2015-01-09 14:48:55.178781325 -0800 +++ new/src/java.desktop/share/classes/javax/swing/text/StringContent.java 2015-01-09 14:48:54.918781325 -0800
@@ -271,11 +271,12 @@
      * @param length the length &gt;= 0
      * @return the set of instances
      */
- protected Vector<UndoPosRef> getPositionsInRange(Vector<UndoPosRef> v, int offset,
-                                                      int length) {
+ @SuppressWarnings({"rawtypes", "unchecked"}) // UndoPosRef type cannot be exposed
+    protected Vector getPositionsInRange(Vector v, int offset,
+                                         int length) {
         int n = marks.size();
         int end = offset + length;
-        Vector<UndoPosRef> placeIn = (v == null) ? new Vector<>() : v;
+        Vector placeIn = (v == null) ? new Vector() : v;
         for (int i = 0; i < n; i++) {
             PosRec mark = marks.elementAt(i);
             if (mark.unused) {
@@ -298,9 +299,10 @@
      *
      * @param positions the positions of the instances
      */
-    protected void updateUndoPositions(Vector<UndoPosRef> positions) {
+    @SuppressWarnings("rawtypes") // UndoPosRef type cannot be exposed
+    protected void updateUndoPositions(Vector positions) {
for(int counter = positions.size() - 1; counter >= 0; counter--) {
-            UndoPosRef ref = positions.elementAt(counter);
+            UndoPosRef ref = (UndoPosRef)positions.elementAt(counter);
             // Check if the Position is still valid.
             if(ref.rec.unused) {
                 positions.removeElementAt(counter);
@@ -437,7 +439,8 @@
         protected String string;
         // An array of instances of UndoPosRef for the Positions in the
         // range that was removed, valid after undo.
-        protected Vector<UndoPosRef> posRefs;
+ @SuppressWarnings("rawtypes") // UndoPosRef type cannot be exposed
+        protected Vector posRefs;
     }


@@ -445,6 +448,7 @@
      * UndoableEdit created for removes.
      */
     class RemoveUndo extends AbstractUndoableEdit {
+        @SuppressWarnings("unchecked")
         protected RemoveUndo(int offset, String string) {
             super();
             this.offset = offset;
@@ -471,6 +475,7 @@
             }
         }

+        @SuppressWarnings("unchecked")
         public void redo() throws CannotRedoException {
             super.redo();
             try {



--
Best regards, Sergey.

Reply via email to