> 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

Reply via email to