Swing Dev [9] Review Request: 8068374 setAlignmentX, setAlignmentY, getAlignmentX, getAlignmentY javadoc of JComponent
Hello. Please review a small fix for jdk 9. Incorrect description in JComponent.set/getAlignmentX/Y were aligned with Component.getAlignmentX/Y. Bug: https://bugs.openjdk.java.net/browse/JDK-8068374 Webrev can be found at: http://cr.openjdk.java.net/~serb/8068374/webrev.00 -- Best regards, Sergey.
Re: Swing Dev JDK 9 RFR of JDK-8055059: JDK9b22 public API exposes package private classes, take 2
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 VectorUndoPosRef 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 VectorUndoPosRef getPositionsInRange(VectorUndoPosRef 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(VectorUndoPosRef 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 VectorUndoPosRef 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 VectorUndoPosRef getPositionsInRange(VectorUndoPosRef 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; -VectorUndoPosRef 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(VectorUndoPosRef 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
Re: Swing Dev [9] Review Request: 8068374 setAlignmentX, setAlignmentY, getAlignmentX, getAlignmentY javadoc of JComponent
The fix looks good to me. Thanks, Alexandr. On 1/12/2015 11:44 AM, Sergey Bylokhov wrote: Hello. Please review a small fix for jdk 9. Incorrect description in JComponent.set/getAlignmentX/Y were aligned with Component.getAlignmentX/Y. Bug: https://bugs.openjdk.java.net/browse/JDK-8068374 Webrev can be found at: http://cr.openjdk.java.net/~serb/8068374/webrev.00
Swing Dev [9] Review request for 8068040 [macosx] Combo box consuming ENTER key events
Hello, Could you review the fix: bug: https://bugs.openjdk.java.net/browse/JDK-8068040 webrev: http://cr.openjdk.java.net/~alexsch/8068040/webrev.00 BasicComboBoxUI has a special workaround to forward the enter pressed event on the editable combo box to the default button. The combobox editor handler quires the enterPressed action and executes it. AquaComboBoxUI registers the enter action only with the aquaEnterPressed key. The possible solutions are: - BasicComboBoxUI could use LF dependent key for an enter action. It may require adding some public API. - Register a new handler to the comboboc editor. The actionPerformed method of this handler will duplicate Handler code from BasicComboBoxUI. The proposed solution just registers the AquaComboBoxUI enter action with the enterPressed key. Thanks, Alexandr.
Re: Swing Dev JDK 9 RFR of JDK-8055059: JDK9b22 public API exposes package private classes, take 2
The fix looks good to me. Could you formate the code to have a space between type cast (UndoPosRef) and the positions variable? 780 UndoPosRef ref = (UndoPosRef)positions.elementAt(counter); Thanks, Alexandr. On 1/10/2015 3:23 AM, 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 VectorUndoPosRef 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 VectorUndoPosRef getPositionsInRange(VectorUndoPosRef 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(VectorUndoPosRef 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 VectorUndoPosRef 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 VectorUndoPosRef getPositionsInRange(VectorUndoPosRef 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; -VectorUndoPosRef 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(VectorUndoPosRef 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.
Swing Dev [9] Review Request: 8015085 [macosx] Label shortening via ... broken when String contains combining diaeresis
Hello. Please review a fix for jdk 9. Description: The problem is that we consider the string which contains a combining diaeresis as string which needs TextLayout. In such case SwingUtilities2.clipString will use LineBreakMeasurer to calculate the characters inside some advance. But by default LineBreakMeasurer will use LineSeparator instead of CharSeparator, and this causes a difference against a normal case where we use per character calculation(SwingUtilities2 lines 453 - 461). Note that in the test I paint two strings one with combining diaeresis/one without, and expect that they will be rendered in the same way. Bug: https://bugs.openjdk.java.net/browse/JDK-8015085 Webrev can be found at: http://cr.openjdk.java.net/~serb/8015085/webrev.01 -- Best regards, Sergey.
Re: Swing Dev [8u-dev] Review request for bug 8068301 : [TEST_BUG] Test javax/swing/JColorChooser/Test4177735.java fails with ArrayIndexOutOfBoundsException with GTKLF
Hello, Can you confirm that the test still fails before the fix for 4177735 was integrated, using both LF? On 12.01.2015 18:45, shobhit gupta wrote: |Hi,| |Please review a fix ||for| |the issue:| 8068301 : [TEST_BUG] Test javax/swing/JColorChooser/Test4177735.java fails with ArrayIndexOutOfBoundsException with GTKLF |Test bug fix.| |https://bugs.openjdk.java.net/browse/JDK-8068301||| |The webrev is: |http://cr.openjdk.java.net/~kshefov/8068301/webrev.00/ || |Thanks Regards, | |Shobhit Gupta| -- Best regards, Sergey.
Re: Swing Dev [8u-dev] Review request for bug 8068301 : [TEST_BUG] Test javax/swing/JColorChooser/Test4177735.java fails with ArrayIndexOutOfBoundsException with GTKLF
Hi Sergey, Before the fix for 4177735 was integrated, test failed with the GTKLookAndFeel but passed with the MetalLookAndFeel. On 12-Jan-15 9:25 PM, Sergey Bylokhov wrote: Hello, Can you confirm that the test still fails before the fix for 4177735 was integrated, using both LF? On 12.01.2015 18:45, shobhit gupta wrote: |Hi,| |Please review a fix ||for| |the issue:| 8068301 : [TEST_BUG] Test javax/swing/JColorChooser/Test4177735.java fails with ArrayIndexOutOfBoundsException with GTKLF |Test bug fix.| |https://bugs.openjdk.java.net/browse/JDK-8068301||| |The webrev is: |http://cr.openjdk.java.net/~kshefov/8068301/webrev.00/ || |Thanks Regards, | |Shobhit Gupta| -- Best regards, Sergey. Regards, Shobhit Gupta
Swing Dev [9] Review Request: 6338077 link back to self in javadoc JTextArea.replaceRange()
Hello. Please review a small fix for jdk 9. Unnecessary link was removed. Bug: https://bugs.openjdk.java.net/browse/JDK-6338077 Webrev can be found at: http://cr.openjdk.java.net/~serb/6338077/webrev.00 -- Best regards, Sergey.
Swing Dev [8u-dev] Review request for bug 8068301 : [TEST_BUG] Test javax/swing/JColorChooser/Test4177735.java fails with ArrayIndexOutOfBoundsException with GTKLF
|Hi,| |Please review a fix ||for| |the issue:| 8068301 : [TEST_BUG] Test javax/swing/JColorChooser/Test4177735.java fails with ArrayIndexOutOfBoundsException with GTKLF |Test bug fix.| |https://bugs.openjdk.java.net/browse/JDK-8068301||| |The webrev is: |http://cr.openjdk.java.net/~kshefov/8068301/webrev.00/ || |Thanks Regards, | |Shobhit Gupta|
Swing Dev IndexOf with Char instead of String
These String literals may be replaced by equivalent character literals[1], gaining some performance enhancement. Webrev: https://dl.dropboxusercontent.com/u/16109193/open_jdk/jdk/index_of_character/index.html [1] @State(Scope.Thread) @OutputTimeUnit(TimeUnit.SECONDS) public class IndexOfBenchmark { private static final String WORDS = I love java Language 8 because has Lambda, Stream and MetaSpace; @Param(1) private int param; @GenerateMicroBenchmark public void indexOfString(BlackHole bh) { for (int i = 0; i = param; i++) { int index = WORDS.indexOf(,); bh.consume(index); } } @GenerateMicroBenchmark public void indexOfChar(BlackHole bh) { for (int i = 0; i = param; i++) { int index = WORDS.indexOf(','); bh.consume(index); } } } Benchmark (param) Mode Samples Mean Mean errorUnits m.IndexOfBenchmark.indexOfChar1 thrpt10 5579.120 114.179ops/s m.IndexOfBenchmark.indexOfString 1 thrpt10 4562.178 46.751ops/s -- Otávio Gonçalves de Santana blog: http://otaviosantana.blogspot.com.br/ twitter: http://twitter.com/otaviojava site: *http://about.me/otaviojava http://about.me/otaviojava* 55 (11) 98255-3513 # HG changeset patch # User Otavio Santana otavioj...@java.net # Date 1421101042 7200 # Mon Jan 12 20:17:22 2015 -0200 # Node ID a30b25a498f51a6de42a278c27612817925ff941 # Parent c06b6d58e6a9c10cea9f0b8946846c3de4f59feb uses indexOf with Character indexOf String diff --git a/src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java b/src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java --- a/src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java +++ b/src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java @@ -547,7 +547,7 @@ i = strLowerCase.indexOf(stringvalue, i); if (i 0) { i += stringvalue.length(); -int i2 = str.indexOf(, i); +int i2 = str.indexOf('', i); return str.substring(i, i2); } } diff --git a/src/java.base/share/classes/com/sun/java/util/jar/pack/ConstantPool.java b/src/java.base/share/classes/com/sun/java/util/jar/pack/ConstantPool.java --- a/src/java.base/share/classes/com/sun/java/util/jar/pack/ConstantPool.java +++ b/src/java.base/share/classes/com/sun/java/util/jar/pack/ConstantPool.java @@ -512,7 +512,7 @@ } static String qualifiedStringValue(String s1, String s234) { // Qualification by dot must decompose uniquely. Second string might already be qualified. -assert(s1.indexOf(.) 0); +assert(s1.indexOf('.') 0); return s1+.+s234; } diff --git a/src/java.corba/share/classes/com/sun/jndi/cosnaming/CorbanameUrl.java b/src/java.corba/share/classes/com/sun/jndi/cosnaming/CorbanameUrl.java --- a/src/java.corba/share/classes/com/sun/jndi/cosnaming/CorbanameUrl.java +++ b/src/java.corba/share/classes/com/sun/jndi/cosnaming/CorbanameUrl.java @@ -102,7 +102,7 @@ } location = url.substring(addrStart, addrEnd); -int keyStart = location.indexOf(/); +int keyStart = location.indexOf('/'); if (keyStart = 0) { // Has key string if (keyStart == (location.length() -1)) { diff --git a/src/jdk.naming.rmi/share/classes/com/sun/jndi/rmi/registry/RegistryContext.java b/src/jdk.naming.rmi/share/classes/com/sun/jndi/rmi/registry/RegistryContext.java --- a/src/jdk.naming.rmi/share/classes/com/sun/jndi/rmi/registry/RegistryContext.java +++ b/src/jdk.naming.rmi/share/classes/com/sun/jndi/rmi/registry/RegistryContext.java @@ -336,7 +336,7 @@ String url = rmi://; // Enclose IPv6 literal address in '[' and ']' -url = (host.indexOf(:) -1) ? url + [ + host + ] : +url = (host.indexOf(':') -1) ? url + [ + host + ] : url + host; if (port 0) { url += : + Integer.toString(port); diff --git a/src/java.naming/share/classes/com/sun/jndi/toolkit/url/GenericURLContext.java b/src/java.naming/share/classes/com/sun/jndi/toolkit/url/GenericURLContext.java --- a/src/java.naming/share/classes/com/sun/jndi/toolkit/url/GenericURLContext.java +++ b/src/java.naming/share/classes/com/sun/jndi/toolkit/url/GenericURLContext.java @@ -149,7 +149,7 @@ * foo:rest/of/namefoo: */ protected String getURLPrefix(String url) throws NamingException { -int start = url.indexOf(:); +int start = url.indexOf(':'); if (start 0) { throw new OperationNotSupportedException(Invalid URL: + url); @@ -160,7 +160,7 @@
Swing Dev [9] Review Request: 6573305 Animated icon is not visible by click on menu
Hello. Please review a fix for jdk 9. When we paint some image on component we use this component as an observer, which will be called when the image should be repainted(in case of animated gif for example). But our code in the AbstractButton.imageUpdate() will replace correct Icon to null if button is pressed, disabled, etc(if such icon was not set of course). After the fix we will use default icon only if more specific image was not found. Bug: https://bugs.openjdk.java.net/browse/JDK-6573305 Webrev can be found at: http://cr.openjdk.java.net/~serb/6573305/webrev.00 -- Best regards, Sergey.
Swing Dev [9] Review Request: 6459800 Some Swing classes violate encapsulation by returning internal Insets
Hello. Please review a fix for jdk 9. Most of the problems, which were found by the test, were fixed already, but one issue was found in Aqua. Bug: https://bugs.openjdk.java.net/browse/JDK-6459800 Webrev can be found at: http://cr.openjdk.java.net/~serb/6459800/webrev.00 -- Best regards, Sergey.
Re: Swing Dev JDK 9 RFR of JDK-8055059: JDK9b22 public API exposes package private classes, take 2
+1 -phil. On 1/12/2015 1:13 AM, Sergey Bylokhov wrote: 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 VectorUndoPosRef 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 VectorUndoPosRef getPositionsInRange(VectorUndoPosRef 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(VectorUndoPosRef 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 VectorUndoPosRef 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 VectorUndoPosRef getPositionsInRange(VectorUndoPosRef 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; -VectorUndoPosRef 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(VectorUndoPosRef 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