Hi core-libs-dev, I know various threads have existed over the past few months on SequencedCollection and its implications on compatibility. I wanted to raise this semi-related issue we noticed recently after beginning testing against Java 21.
Elasticsearch began testing against Java 21, and noticed a series of failures in Painless (our builtin scripting language, which dynamically compiles to bytecode). Most tests that used List failed to compile, with several unknown methods (eg add). Painless builds a hierarchy of classes it knows about for method resolution. This hierarchy didn't know anything about SequencedCollection since we currently compile against Java 17. Now, this was ultimately a bug in Painless, because we knew there could be cases where we encounter unknown classes in the hierarchy (eg a class which is not blessed to be visible in the language). However, I think the reason we found that bug (List extending from SequencedCollection) might still cause issues for some. While debugging the issue, something that struck me as interesting in the SequencedCollection hierarchy is the difference between List and SortedSet. Both of these classes were made to be compatible with sequenced classes by adding the new classes as super interfaces, SequencedCollection and SequencedSet, respectively. However, while SortedSet was *added* as a super interface, List had its super interface Collection *replaced* by SequencedCollection. I don't know enough about the rampdown process to know if this is still fixable in Java 21. It is probably an extreme edge case that doesn't matter, since eg instanceof Collection will still work in existing code. But for consistency, it would seem better to maintain Collection as a direct super interface of List. Is there any reason such a change doesn't fit with the collections architecture going forward?