> Please review this PR which proposes we replace `j.u.ArrayDeque` with > `j.u.ArrayList` in `jdk.internal.loader.URLClassPath`. > > The motivation for using a double-ended queue may have been that "original" > search path URLs are added to the tail of the queue while any URLs discovered > during JAR `Class-Path` expansion are inserted at the head such that they are > processed first. > > By splitting these two concerns and processing loader discovered class path > URLs separately from the original search path, we no longer need a > double-ended queue. We can replace `ArrayDeque` with `ArrayList`. > > Advantages: > > * A "hello world" Java program no longer loads `ArrayDeque`, `Deque` and > `Queue` (`URLClassPath` is the only consumer of these classes during startup > using a directory class path) > * One data structure is simpler than two > * We no longer need to manage search path URLs across two different > collections > * Code and comments to dance around `ArrayDeque` calling into lambda too > early is no longer a concern and can be removed > * I think this PR leaves the code overall simpler and easier to follow. > > Testing: > > This PR introduces a new test to verify that URLs disovered via a multi-level > tree paths discovered via `Class-Path` JAR attributes are found in the > expected DFS order. The ordering aspect seems to lack existing coverage.
Eirik Bjørsnøs has updated the pull request incrementally with two additional commits since the last revision: - Remove @bug tag, no product bug discovered - Rename test and deemphasize DFS is comments ------------- Changes: - all: https://git.openjdk.org/jdk/pull/29288/files - new: https://git.openjdk.org/jdk/pull/29288/files/36fca66c..835e0141 Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=29288&range=03 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=29288&range=02-03 Stats: 11 lines in 1 file changed: 0 ins; 1 del; 10 mod Patch: https://git.openjdk.org/jdk/pull/29288.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/29288/head:pull/29288 PR: https://git.openjdk.org/jdk/pull/29288
