`Collections.rotate` method contains a bug. This method throws IndexOutOfBoundsException on arrays larger than $2^{30}$ elements. The way to reproduce:
final int size = (1 << 30) + 1; final List<Byte> list = new ArrayList<>(size); for (int i = 0; i < size; ++i) list.add((byte) 0); Collections.rotate(list, size - 1); Output: ```Exception in thread "main" java.lang.IndexOutOfBoundsException: Index -2147483648 out of bounds for length 1073741825``` In that case private method `Collections.rotate1` will be called. And the line: `i += distance;` will cause overflow. I fixed this method and wrote a test for it. I've signed the Oracle Contributor Agreement, but I don't have permission to raise a bug in the JDK Bug System. Kindly ask you to raise a bug. ------------- Commit messages: - 83141345: fix overflow in Collections.rotate Changes: https://git.openjdk.org/jdk/pull/15270/files Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=15270&range=00 Issue: https://bugs.openjdk.org/browse/JDK-8314236 Stats: 52 lines in 2 files changed: 45 ins; 1 del; 6 mod Patch: https://git.openjdk.org/jdk/pull/15270.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/15270/head:pull/15270 PR: https://git.openjdk.org/jdk/pull/15270