Hi,

Since Joe mentioned to add information related to what fields we are using to 
calculate equals() method in ColorModel and its subclasses I have updated the 
spec for the same.

Please find updated webrev for review:
http://cr.openjdk.java.net/~jdv/7107905/webrev.11/ 

Thanks,
Jay

-----Original Message-----
From: Jim Graham 
Sent: Saturday, June 04, 2016 4:52 AM
To: Jayathirth D V; Philip Race
Cc: 2d-dev@openjdk.java.net
Subject: Re: [OpenJDK 2D-Dev] Review Request for JDK-7107905: ColorModel 
subclasses are missing hashCode() or equals() or both methods

That looks good to me.  Has the CCC cleared yet?

                ...jim

On 6/3/16 2:49 AM, Jayathirth D V wrote:
> Hi Jim,
>
> Oh that's an important change.
> Thanks for your review.
>
> I have updated ColorModel constructor to copy nBIts only of numOfComponents 
> length and I have removed validBits check in hashCode() of ICM.
> Please find updated webrev for review:
> http://cr.openjdk.java.net/~jdv/7107905/webrev.10/
>
> Thanks,
> Jay
>
> -----Original Message-----
> From: Jim Graham
> Sent: Friday, June 03, 2016 2:25 AM
> To: Jayathirth D V; Philip Race
> Cc: 2d-dev@openjdk.java.net
> Subject: Re: Review Request for JDK-7107905: ColorModel subclasses are 
> missing hashCode() or equals() or both methods
>
> I just noticed a hashCode/equals violation that we created a few revisions 
> ago.  We compute the hash of the validBits in ICM, but we only compare 
> validBits up to the number of colors in the colormap.  One could construct 
> two ICMs that have different validBits that are identical in the first N bits 
> (N = number of colors), but have different bits beyond that, and those 2 ICMs 
> would evaluate as equals(), but their hashcodes would be different.
>
> Possible solutions:
>
> - Truncate validBits when it is accepted in the constructor 
> (validBits.and(...))
> - Manually compute the hash of the first N bits of validBits
> - Not use validBits in the hash code since it is allowed to omit 
> significant data from the hash
>
> (Note that everything in hashcode must participate in equals(), but 
> not vice versa)
>
> The same is true of nBits in ColorModel.  (nBits can be copied and 
> truncated with Arrays.copyOf)
>
> The same is *not* true of maskBits in PCM since the constructor creates an 
> array of the precise length it needs...
>
>                       ...jim
>
> On 6/2/16 7:07 AM, Jayathirth D V wrote:
>> Hi Phil,
>>
>> I have updated the code with all the changes I mentioned previously. I am 
>> caching hashCode when first time hashCode() is called.
>> Please find the updated webrev for review:
>> http://cr.openjdk.java.net/~jdv/7107905/webrev.09/
>>
>> Thanks,
>> Jay
>>
>> -----Original Message-----
>> From: Philip Race
>> Sent: Wednesday, June 01, 2016 10:06 PM
>> To: Jayathirth D V
>> Cc: Jim Graham; 2d-dev@openjdk.java.net
>> Subject: Re: Review Request for JDK-7107905: ColorModel subclasses 
>> are missing hashCode() or equals() or both methods
>>
>> Please post the updated webrev.
>>
>> -phil.
>>
>> On 6/1/16, 12:02 AM, Jayathirth D V wrote:
>>> Hi Phil&  Jim,
>>>
>>> Collating all the changes needed:
>>> 1) I have removed both equals()&  hashCode() in CCM but forgot to add the 
>>> file while creating webrev. I will include changes in CCM in updated webrev.
>>> 2) Caching of hashCode value in IndexColorModel&  PackedColorModel :
>>>     We can cache hashCode value when constructor is called or when 
>>> hashCode() is called for first time. What approach we have to follow?
>>> 3) Comment section of equals() method, I will update it to :
>>>     1449      * the target object must be the same class (and not a 
>>> subclass) as this
>>> 4) I will use .equals() to compare colorSpace values in CM.equals() so it 
>>> will be like we are not intending ColorSpace class to never override 
>>> equals() method.
>>>
>>> Please let me know your inputs.
>>>
>>> Thanks,
>>> Jay
>>>
>>> -----Original Message-----
>>> From: Jim Graham
>>> Sent: Wednesday, June 01, 2016 4:14 AM
>>> To: Phil Race
>>> Cc: Jayathirth D V; 2d-dev@openjdk.java.net
>>> Subject: Re: Review Request for JDK-7107905: ColorModel subclasses 
>>> are missing hashCode() or equals() or both methods
>>>
>>> I think we should use .equals() here, otherwise it looks like a 
>>> recommendation that the intent is for those classes to never implement it...
>>>
>>>                     ...jim
>>>
>>> On 05/31/2016 03:31 PM, Phil Race wrote:
>>>> I don't know of any design intent, so yes, I meant more as a 
>>>> practical matter.
>>>> Unless they subclass then using equals() which I thought unlikely 
>>>> it makes no difference here.
>>>> But it would be proof against that to use equals, unlikely to 
>>>> matter as it might be ..
>>>>
>>>> -phil.
>>>>
>>>> On 05/31/2016 03:19 PM, Jim Graham wrote:
>>>>>
>>>>> On 05/31/2016 02:50 PM, Phil Race wrote:
>>>>>> On 05/31/2016 12:20 PM, Jim Graham wrote:
>>>>>>> Hi Jay,
>>>>>>>
>>>>>>> You were going to remove hashCode/equals from CCM, but instead 
>>>>>>> you simply removed it from the patch.  You still need to edit it 
>>>>>>> to remove the existing methods.
>>>>>> Oh yeah ! CCM is gone from the latest webrev. I expect that was 
>>>>>> not intentional.
>>>>>>
>>>>>>> Also, I'm not sure == is a good way to compare ColorSpace 
>>>>>>> instances
>>>>>>> - Phil?
>>>>>> Neither ColorSpace nor ICC_ColorSpace over-ride equals or 
>>>>>> hashCode and all the predefined ones are constructed as 
>>>>>> singletons so it seems unlikely to cause problems
>>>>> Should it use .equals() on principle, though?  Otherwise we are 
>>>>> baking in the assumption that it doesn't implement equals() into 
>>>>> our implementation of the CM.equals() method.  Might it some day 
>>>>> implement equals (perhaps it isn't a practical issue today, but it 
>>>>> might be in the future when we forget that it was omitted in this 
>>>>> usage we create today).
>>>>>
>>>>> I guess what I'm asking is if it is a design feature that 
>>>>> different objects are considered non-equal (such as an object 
>>>>> that, for instance, has only predetermined instances that are 
>>>>> shared by reference and reused).  I think color spaces are sort of 
>>>>> in-between in that we define a few constants that simply get used 
>>>>> by reference in 99% of cases, but that isn't a design feature, 
>>>>> more like a practical issue...
>>>>>
>>>>>              ...jim

Reply via email to