FWIW, but as we're in java.base there's a way to use the jdk.internal.util.Preconditions API backing Objects.checkFrom* methods directly, which lets you control the type of exception thrown:

private static final BiFunction<String, List<Integer>, 
ArrayIndexOutOfBoundsException> AIOOBE_SUPPLIER
    = 
Preconditions.outOfBoundsExceptionFormatter(ArrayIndexOutOfBoundsException::new);

public static void nullAndBoundsCheck(byte[] array, int offset, int len) {
    Preconditions.checkFromIndexSize(offset, len, array.length, 
AIOOBE_SUPPLIER); // implicit null check of array
}

Prior art is really only the java.lang.invoke.VarHandle.AIOOBE_SUPPLIER (which 
is used from generated code, e.g. j.l.i.VarHandleInts); maybe it could be 
refactored to some internal package for reuse.

(I'd remove the explicit null check and lower-case the N in NullAndBoundsCheck, 
regardless)

Thanks!

/Claes


On 2018-07-10 02:42, Valerie Peng wrote:
Hi Tony,

The purpose of the if-block is to ensure that ArrayIndexOutOfBoundsException is thrown instead of IndexOutOfBoundsException.  Objects.checkFromIndexSize(...) API is specified to throw IndexOutOfBoundsException which is more general and can be thrown when an index of some sort (such as to an array, to a string, or to a vector) is out of range. ArrayIndexOutOfBoundsException is a subclass of IndexOutOfBoundsException and is for array index out of bounds.

Thanks,
Valerie

On 7/9/2018 3:14 PM, Anthony Scarpino wrote:
On 07/03/2018 02:03 PM, Valerie Peng wrote:
Hi Tony,

Would you have time to review this? Instead of doing the bounds check per block, the changes move the bounds check up one level.

Bug: https://bugs.openjdk.java.net/browse/JDK-8179098

Webrev: http://cr.openjdk.java.net/~valeriep/8179098/webrev.00/

Thanks,
Valerie


ArrayUtil.java: Line 48
- It seems like your not throwing any ArrayIndexOutOfBoundsExceptions, is that intentional? The method in the try-catch seems to only throw IndexOutOfBoundsException, whole if() seems confusing to me.
thanks

Tony


Reply via email to