The introduction of Sequenced collections is not a source compatible change

Ethan McCue ethan at mccue.dev
Thu May 4 13:32:31 UTC 2023


I guess this a good time to ask, ignoring the benefit part of a cost
benefit analysis, what mechanisms do we have to measure the number of
codebases relying on type inference this will break?

Iirc Adoptium built/ran the unit tests of a bunch of public repos, but it's
also a bit shocking if the jtreg suite had nothing for this.

On Thu, May 4, 2023, 9:27 AM Raffaello Giulietti <
raffaello.giulietti at oracle.com> wrote:

> Without changing the semantics at all, you could also write
>
>         final List<Collection<String>> list =
> Stream.<Collection<String>>of(nestedDequeue, nestedList).toList();
>
> to "help" type inference.
>
>
>
>
> On 2023-05-03 15:12, forax at univ-mlv.fr wrote:
> > Another example sent to me by a fellow French guy,
> >
> >      final Deque<String> nestedDequeue = new ArrayDeque<>();
> >      nestedDequeue.addFirst("C");
> >      nestedDequeue.addFirst("B");
> >      nestedDequeue.addFirst("A");
> >
> >      final List<String> nestedList = new ArrayList<>();
> >      nestedList.add("D");
> >      nestedList.add("E");
> >      nestedList.add("F");
> >
> >      final List<Collection<String>> list = Stream.of(nestedDequeue,
> nestedList).toList();
> >
> > This one is cool because no 'var' is involved and using
> collect(Collectors.toList()) instead of toList() solves the inference
> problem.
> >
> > Rémi
> >
> > ----- Original Message -----
> >> From: "Stuart Marks" <stuart.marks at oracle.com>
> >> To: "Remi Forax" <forax at univ-mlv.fr>
> >> Cc: "core-libs-dev" <core-libs-dev at openjdk.java.net>
> >> Sent: Tuesday, May 2, 2023 2:44:28 AM
> >> Subject: Re: The introduction of Sequenced collections is not a source
> compatible change
> >
> >> Hi Rémi,
> >>
> >> Thanks for trying out the latest build!
> >>
> >> I'll make sure this gets mentioned in the release note for Sequenced
> >> Collections.
> >> We'll also raise this issue when we talk about this feature in the
> Quality
> >> Outreach
> >> program.
> >>
> >> s'marks
> >>
> >> On 4/29/23 3:46 AM, Remi Forax wrote:
> >>> I've several repositories that now fails to compile with the latest
> jdk21, which
> >>> introduces sequence collections.
> >>>
> >>> The introduction of a common supertype to existing collections is
> *not* a source
> >>> compatible change because of type inference.
> >>>
> >>> Here is a simplified example:
> >>>
> >>>     public static void m(List<Supplier<? extends Map<String, String>>>
> factories) {
> >>>     }
> >>>
> >>>     public static void main(String[] args) {
> >>>       Supplier<LinkedHashMap<String,String>> supplier1 =
> LinkedHashMap::new;
> >>>       Supplier<SortedMap<String,String>> supplier2 = TreeMap::new;
> >>>       var factories = List.of(supplier1, supplier2);
> >>>       m(factories);
> >>>     }
> >>>
> >>>
> >>> This example compiles fine with Java 20 but report an error with Java
> 21:
> >>>     SequencedCollectionBug.java:28: error: method m in class
> SequencedCollectionBug
> >>>     cannot be applied to given types;
> >>>       m(factories);
> >>>       ^
> >>>     required: List<Supplier<? extends Map<String,String>>>
> >>>     found:    List<Supplier<? extends SequencedMap<String,String>>>
> >>>     reason: argument mismatch; List<Supplier<? extends
> SequencedMap<String,String>>>
> >>>     cannot be converted to List<Supplier<? extends Map<String,String>>>
> >>>
> >>>
> >>>
> >>> Apart from the example above, most of the failures I see are in the
> unit tests
> >>> provided to the students, because we are using a lot of 'var' in them
> so they
> >>> work whatever the name of the types chosen by the students.
> >>>
> >>> Discussing with a colleague, we also believe that this bug is not
> limited to
> >>> Java, existing Kotlin codes will also fail to compile due to this bug.
> >>>
> >>> Regards,
> >>> Rémi
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/core-libs-dev/attachments/20230504/815127e2/attachment-0001.htm>


More information about the core-libs-dev mailing list