RFR [8014066] Mistake in documentation of ArrayList#removeRange (original) (raw)

Ivan Gerasimov ivan.gerasimov at oracle.com
Thu Mar 13 18:27:07 UTC 2014


On 13.03.2014 22:16, Ivan Gerasimov wrote:

On 13.03.2014 20:37, Martin Buchholz wrote: The corner case for removeRange(SIZE, SIZE) does seem rather tricky, and it's easy for an implementation to get it wrong. All the more reason to add tests!

It was a good idea to add a test for removeRange(). I just discovered that IOOB isn't thrown when you call removeRange(1, 0) or removeRange(4, 0). However, the exception is thrown when you call removeRange(5, 0). The fix seems to become a bit more than just a doc typo fix :-)

And when you do list.removeRange(1, 0), the list becomes longer.

Sincerely yours, Ivan

On Thu, Mar 13, 2014 at 9:15 AM, Ivan Gerasimov <ivan.gerasimov at oracle.com <mailto:ivan.gerasimov at oracle.com>> wrote: Thank you Chris! It is System.arraycopy() method, where checking is performed and the exception is thrown. Here's this code: if ( (((unsigned int) length + (unsigned int) srcpos) > (unsigned int) s->length()) || (((unsigned int) length + (unsigned int) dstpos) > (unsigned int) d->length()) ) { THROW(vmSymbols::javalangArrayIndexOutOfBoundsException()); } This confirms that size() is a valid value for fromIndex. Another way to think of it is that fromIndex <= toIndex, and toIndex can be equal to size(). Therefore, fromIndex can be equal to size() too. The documentation also says that 'If toIndex==fromIndex, this operation has no effect.', so removeRange(size(), size()) is a valid expression and should not cause an exception be thrown (and it actually does not). Sincerely yours, Ivan

On 13.03.2014 19:47, Chris Hegarty wrote: Ivan, This does look a little odd, but since fromIndex is inclusive I would think that it should throw if passed a value of size() ?? -Chris. On 13 Mar 2014, at 15:29, Ivan Gerasimov <ivan.gerasimov at oracle.com <mailto:ivan.gerasimov at oracle.com>> wrote: Hello! Would you please review a simple fix of the javadoc for ArrayList#removeRange() method? The doc says that IndexOutOfBoundsException is thrown if fromIndex or toIndex is out of range (fromIndex < 0 ||_ _fromIndex >= size() || toIndex > size() || toIndex <_ _fromIndex)._ _The condition 'fromIndex >= size()' isn't true and should be removed from the doc. For example, the code list.removeRange(size(), size()) does not throw any exception. BUGURL: https://bugs.openjdk.java.net/browse/JDK-8014066 WEBREV: http://cr.openjdk.java.net/~igerasim/8014066/0/webrev/ <http://cr.openjdk.java.net/%7Eigerasim/8014066/0/webrev/> Sincerely yours, Ivan



More information about the core-libs-dev mailing list