RFR [15] 8161558: ListIterator should not discard cause on exception

Remi Forax forax at univ-mlv.fr
Wed Feb 5 22:05:47 UTC 2020


Stuart, Martin, Kiran,
I think this "bug" should not be fixed because it's one of the cases where providing more information is actually bad from a user POV. 

The current code throws NoSuchElementException when the iterator reach the end so from the user POV, this is the right exception because of the right issue, so from the user POV there is no need to change the actual code.
If we chain the exception,
- it's less clear from a user POV
- the user may think that there is an error in the AbstractList implementation but it's not the case, it's just that AbstractList iterators next method is implemented weirdly, it prefers to go out of bound instead of checking the bound.

I'm okay with NoSuchElementException having a new constructor that takes a chained exception but i really think that in this specific case, it's a bad idea(TM) to use it to propagate an exception to the user that it should not care about.

BTW, perhaps, those method next() should be re-written to test the bound instead of catching the IOOBE because i'm not sure this "optimization" make sense nowadays.

regards,
Rémi

----- Mail original -----
> De: "Kiran Ravikumar" <kiran.sidhartha.ravikumar at oracle.com>
> À: "core-libs-dev" <core-libs-dev at openjdk.java.net>
> Envoyé: Mercredi 5 Février 2020 20:49:09
> Objet: Re: RFR [15] 8161558: ListIterator should not discard cause on exception

> Thanks Stuart and Martin,
> 
> 
> Here is an updated webrev with the changes.
> 
> http://cr.openjdk.java.net/~kravikumar/8161558/webrev.01/
> 
> JBS: https://bugs.openjdk.java.net/browse/JDK-8161558
> 
> 
> Thanks,
> 
> Kiran
> 
> 
> On 15/01/2020 12:46, Martin Buchholz wrote:
>> Hi Kiran,
>>
>> Looks good to me, but I always nitpick ...
>>
>> Stray semicolon?
>>        var iterator = list.listIterator(list.size());; // position at end
>>
>> I would have documented whitebox test assumptions: that nCopies
>> iterators are implemented via AbstractList, and that
>> AbstractList's list iterator inherits behavior from iterator.
>>
>> I probably would have added a plain iterator test, and might have
>> refactored the code that tests the exception.
>>
>>
>> On Wed, Jan 15, 2020 at 4:07 AM Kiran Ravikumar
>> <kiran.sidhartha.ravikumar at oracle.com
>> <mailto:kiran.sidhartha.ravikumar at oracle.com>> wrote:
>>
>>     Hi Guys,
>>
>>
>>     Could someone please review my fix to add missing standard
>>     constructor
>>     overloads to NoSuchElementException class and update the AbstractList
>>     class to use them.
>>
>>
>>     A CSR was filed and approved. Along with the code change a new
>>     test is
>>     added to verify the behavior.
>>
>>
>>     Please find the webrev at  -
>>
>>
>>     http://cr.openjdk.java.net/~kravikumar/8161558/webrev.00/
>>
>>
>>     JBS: https://bugs.openjdk.java.net/browse/JDK-8161558
>>
>>
>>     Thanks,
>>
>>     Kiran


More information about the core-libs-dev mailing list