Hi Alan,

Thank you for taking care of this.

I investigated how the method had been used. Your fix looks okay. It is not 
only safe but improves the generator's behavior.
I think that we were just lucky that the method had merely wasted CPU and 
didn't cause a worse problem....

Thanks,
--
Yuka


(2013/06/04 21:49), Alan Bateman wrote:

The new build emits a lot of warnings, the warnings when building the build 
tools are the most scary. One warning that is starting to stand out (as other 
issues are addressed) is the GenerateBreakIteratorData tool. In the case the 
issue is that it overrides equals but not hashCode.

This is easily fixed by adding a hashCode method but if I read the code correctly, the 
equals method doesn't match its javadoc. The javadoc claims that it returns true if 
"that" has the exact same characters but that isn't so. I would like to fix 
this tool with the attached patch but it requires careful review because the broken 
equals method is used. I've run the jdk tests with this fix and don't see any issues but 
I don't know how well that BreakIterator is exercised.

-Alan


diff -r 780fbbd50ce4 
make/tools/src/build/tools/generatebreakiteratordata/CharSet.java
--- a/make/tools/src/build/tools/generatebreakiteratordata/CharSet.java Tue Jun 
04 11:52:29 2013 +0100
+++ b/make/tools/src/build/tools/generatebreakiteratordata/CharSet.java Tue Jun 
04 13:08:24 2013 +0100
@@ -39,6 +39,7 @@

 package build.tools.generatebreakiteratordata;

+import java.util.Arrays;
 import java.util.Hashtable;

 /**
@@ -701,7 +702,14 @@
      * the exact same characters as this one
      */
     public boolean equals(Object that) {
-        return (that instanceof CharSet) && 
chars.equals(((CharSet)that).chars);
+        return (that instanceof CharSet) && Arrays.equals(chars, 
((CharSet)that).chars);
+    }
+
+    /**
+     * Returns the hash code for this set of characters
+     */
+    public int hashCode() {
+       return Arrays.hashCode(chars);
     }

     /**


Reply via email to