Hi Naoto,
That sounds like a test issue. I would not expect a cloned Calendar or
TimeZone to have a different hashCode.
None of the fields involved in the hashCode/equals should be different.
(Or I'm missing something about them).
Thanks, Roger
On 9/4/18 5:19 PM, Naoto Sato wrote:
Hi Roger,
I tentatively tried to return a shared zone within a cloned Calendar.
One test failed: java/util/Calendar/CalendarRegression.Test4136399,
where it makes sure that the cloned Calendar object hash code should
be different for the better distribution. Although the comment does
not reflect the current implementation (getTimeZone() returning cloned
zone), the intention here seems to have the better hash distribution
for cloned objects.
Naoto
On 9/4/18 1:41 PM, Roger Riggs wrote:
Hi Naoto,
That access via reflection is going to go away sometime; so I'm not
too concerned about
maintaining compatibility of the internal implementation.
I think I'd rather see the memory savings, however small.
Let see if anyone else has a recommendation.
Roger
On 9/4/18 4:12 PM, Naoto Sato wrote:
Hi Roger,
Yes, I considered that too, but did not change the behavior and just
to maintain the field consistent. I agree that it would not be
observable via the public Calendar API, but some apps (like how the
submitter found it) may be doing something using reflection.
Naoto
On 9/4/18 12:31 PM, Roger Riggs wrote:
Hi Naoto,
The spec for clone doesn't say whether the clone should share or
not share the TimeZone.
Did you consider that if sharedZone was true , *not* to clone the
TimeZone?
It would still get cloned when requested from getTimeZone().
This does seem somewhat safer not to change the cloning behavior
but I don't think the behavior would be observable.
The current code and test is fine, except for reducing the
potential for sharing the TimeZone.
Thanks, Roger
On 9/4/2018 2:14 PM, Naoto Sato wrote:
Hello,
Please review the fix to the following issue:
https://bugs.openjdk.java.net/browse/JDK-8210142
The proposed fix is located at:
http://cr.openjdk.java.net/~naoto/8210142/webrev.00/
The fix is a simple one line change, which is to make the
sharedZone field consistent with the cloned TimeZone instance in
Calendar.clone().
Naoto