<i18n dev> 8015880: GenerateBreakIteratorData build warning

Alan Bateman Alan.Bateman at oracle.com
Tue Jun 4 05:49:11 PDT 2013


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);
      }

      /**



More information about the i18n-dev mailing list