<Swing Dev> [8] Review request for 8001423 javax.swing.text.StyleContext.SmallAttributeSet breaks hashcode/equals contract

Alexander Scherbatiy alexandr.scherbatiy at oracle.com
Thu Nov 1 13:30:13 UTC 2012


Hello,

   Could you review the fix:
   bug: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=8001423
   webrev: http://cr.openjdk.java.net/~alexsch/8001423/webrev.00

   The 'equals' method from the SmallAttributeSet class compares local 
attributes from the current set with all attributes (local and parent) 
from the second set if local counts are equal.
   So if we check the following text attributes:
       attr1: [ elem1 = value1] // getAttributeCount = 1
       attr2: [ Parent = [ elem1 = value1] ] // getAttributeCount = 1

    The results are:
       attr1.equals(attr2) = false // attr1 does not contain element 
with name Parent
       attr2.equals(attr1) = true // attr2 has element elem1 in the 
parent set

   All other classes that implement AttributeSet interface has the same 
problems with the hashcode/equals contract.

   The fix compares all local attributes from one set with all local 
attributes from the another set in the equals method.
    If both sets have parents, they will be compared automatically (in 
the same way as it was before).


   SimpleAttributeSet: Hashtable returns hashcode based on both keys and 
values. The fix redefines it to return a hash code only for values.
   MuxingAttributeSet: There is no direct way to get all local 
attributes. The getLocalAttribute method returns a value only if name is 
local.
   AbstractElement: If both attribute sets are AbstractElement they are 
compared by reference. In other case they are compared by checking local 
attributes. This preserves the old AbstractElement behaviour.

   The javax/swing/text/AttributeSet/8001423/bug8001423.java test is added.

   I run the javax/swing/text tests and there is no new failures after 
the fix.

Thanks,
Alexandr.




More information about the swing-dev mailing list