<i18n dev> 8015880: GenerateBreakIteratorData build warning
Naoto Sato
naoto.sato at oracle.com
Wed Jun 5 10:47:04 PDT 2013
What about the regression risk? With this fix, the equality would differ
from the prior releases. Would that be ignorable?
Naoto
On 6/5/13 12:23 AM, Yuka Kamiya wrote:
> 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);
>> }
>>
>> /**
>>
>
More information about the i18n-dev
mailing list