JDK 10 RFR of 8176894: Provide specialized implementation for default methods putIfAbsent, computeIfAbsent, computeIfPresent, compute in TreeMap

Claes Redestad claes.redestad at oracle.com
Thu Apr 6 10:45:49 UTC 2017


Hi Sergey,

this looks good to me*, but I can't help wonder if the modCount checking 
is something that should be done separately as a bug fix (with a higher 
priority) and be backported to 8 and 9? Alternatively re-categorize this 
fix as such.

Thanks!

/Claes

* I wouldn't mind seeing the cleanup Martin suggested, i.e., write the 
remapValue as:

     private V remapValue(Entry<K, V> t, K key, BiFunction<? super K, ? 
super V, ? extends V> remappingFunction) {
         V newValue = remappingFunction.apply(key, t.value);
         if (newValue == null) {
             deleteEntry(t);
         } else {
             // replace old mapping
             t.value = newValue;
         }
         return newValue;
      }

On 2017-03-28 21:22, Sergey Kuksenko wrote:
> Friendly reminder.
>
> Have you have chance to review the latest version?
>
>
> On 03/17/2017 12:45 PM, Sergey Kuksenko wrote:
>> Hi, All.
>>
>> I realized (thanks Tagir V.) that if we don't check modCount after 
>> calling mapping function we may get corrupted tree structure.
>> new webrev for review:
>> http://cr.openjdk.java.net/~skuksenko/corelibs/utils/8176894/webrev.01/
>>
>> On 03/17/2017 11:29 AM, Martin Buchholz wrote:
>>> Thanks!  This looks pretty good.  I have a similar effort in 
>>> progress to improve bulk collection operations, most of which made 
>>> it into jdk9.
>>>
>>> ---
>>>
>>> Please use standard java.util whitespace, as Aleksey suggested.
>>>
>>> ---
>>>
>>> Below (and in compute) I wpuld simply
>>> return newValue;
>>> saving a line of code and making it clearer that we are returning 
>>> the result of the remappingFunction
>>>
>>>  676     private V remapValue(Entry<K, V> t, K key, BiFunction<? 
>>> super K, ? super V, ? extends V> remappingFunction) {
>>>  677         V newValue = remappingFunction.apply(key, t.value);
>>>  678         if (newValue == null) {
>>>  679             deleteEntry(t);
>>>  680             return null;
>>>  681         } else {
>>>  682             // replace old mapping
>>>  683             t.value = newValue;
>>>  684             return newValue;
>>>  685         }
>>>  686     }
>>> ---
>>>
>>> This code is surely tested but testing could also surely be 
>>> improved.  That's probably not your job though (it may be mine!)
>>>
>>> I would probably try hand-injecting some bugs into a copy of the 
>>> code and seeing if our jtreg tests catch it, to increase coverage 
>>> confidence.
>>>
>>>
>>> On Thu, Mar 16, 2017 at 12:04 PM, Sergey Kuksenko 
>>> <sergey.kuksenko at oracle.com <mailto:sergey.kuksenko at oracle.com>> wrote:
>>>
>>>     Hi All,
>>>
>>>     Please, review:
>>>     https://bugs.openjdk.java.net/browse/JDK-8176894
>>>     <https://bugs.openjdk.java.net/browse/JDK-8176894>
>>> http://cr.openjdk.java.net/~skuksenko/corelibs/utils/8176894/webrev.00/
>>> <http://cr.openjdk.java.net/%7Eskuksenko/corelibs/utils/8176894/webrev.00/> 
>>>
>>>
>>>     The issue was created for JDK10 in order to don't disturb JDK9
>>>     before launch.
>>>
>>>     --     Best regards,
>>>     Sergey Kuksenko
>>>
>>>
>>
>



More information about the core-libs-dev mailing list