Thank you Ulf!
On 19.03.2014 2:12, Ulf Zibis wrote:
Am 18.03.2014 19:28, schrieb Ivan Gerasimov:
Assuming this last iteration is OK, should the next step be a CCC
request?
Do you mean? :
/*
* ...
+ * It is assumed that fromIndex <= toIndex, otherwise the
behaviour of this method is undefined.
* ...
- * toIndex < fromIndex})
* ...
*/
protected void removeRange(int fromIndex, int toIndex) {
...
The (fromIndex > toIndex) condition is checked now, so the behavior of
the method is defined - it throws an exception.
Please remove and replace inline by size - toIndex:
621 int numMoved = size - toIndex;
It is done this way throughout the class.
I don't think it has to be changed in this particular place.
Improving modCound handling can be done with a different RFE I guess, as
it doesn't connected to the rest of the fix.
Sincerely yours,
Ivan
About modCount:
Wouldn't it be more correct to code? :
616 if (fromIndex > toIndex) {
617 throw new IndexOutOfBoundsException(
618 outOfBoundsMsg(fromIndex, toIndex));
619 }
620 try {
621 modCount++;
622 System.arraycopy(elementData, toIndex, elementData,
fromIndex,
623 size - toIndex);
624 } catch (IndexOutOfBoundsException ioobe) {
625 modCount--;
626 throw ioobe;
627 }
Of even better :
000 private int[] modCount = { 0 };
...
616 if (fromIndex > toIndex) {
617 throw new IndexOutOfBoundsException(
618 outOfBoundsMsg(fromIndex, toIndex));
619 }
620 System.arraycopy(elementData, toIndex, elementData,
fromIndex,
621 size - toIndex, modCount);
Or :
000 public class ArrayList ... implements ModCounter {
001 private int modCount = 0;
001 void incModCount() {
001 modCount++;
004 }
...
616 if (fromIndex > toIndex) {
617 throw new IndexOutOfBoundsException(
618 outOfBoundsMsg(fromIndex, toIndex));
619 }
620 System.arraycopy(elementData, toIndex, elementData,
fromIndex,
621 size - toIndex, this);
-Ulf