> Problem > new PriorityQueue<>(List.of(new Object())) succeeds today when it should > throw ClassCastException. initFromCollection relies on heapify() to surface > incomparable elements, but heapify performs no comparisons on a singleton, so > the lone element is never validated. Collections with two or more > non-Comparable elements already throw. > > Fix > In initFromCollection, when the collection holds exactly one element and no > comparator is in play, self-compare the element before heapifying. This > mirrors what TreeMap does for its first key (see JDK-5045147). Behavior with > an explicit comparator is unchanged: non-Comparable elements are still > accepted when a comparator is provided. > > Testing > Added a copyConstructorSingleton regression test to AddNonComparable covering > PriorityQueue(Collection) and PriorityQueue(Collection, Comparator) with a > null comparator, plus the positive cases (Comparable singleton, explicit > comparator). Verified the new test passes against the patched class and the > existing queues() test still passes. > > > Please let me know for further questions > > > --------- > - [x] I confirm that I make this contribution in accordance with the [OpenJDK > Interim AI Policy](https://openjdk.org/legal/ai).
Srikanth Palutla has updated the pull request incrementally with one additional commit since the last revision: Simplify singleton check per review: instanceof + explicit CCE ------------- Changes: - all: https://git.openjdk.org/jdk/pull/32966/files - new: https://git.openjdk.org/jdk/pull/32966/files/6f6b0234..b671cae8 Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=32966&range=02 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=32966&range=01-02 Stats: 6 lines in 1 file changed: 0 ins; 3 del; 3 mod Patch: https://git.openjdk.org/jdk/pull/32966.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/32966/head:pull/32966 PR: https://git.openjdk.org/jdk/pull/32966
