Scott Murphy Heiberg created GROOVY-12721:
---------------------------------------------
Summary: Awaitable.all, any, first and allSettled should accept a
single list of sources
Key: GROOVY-12721
URL: https://issues.apache.org/jira/browse/GROOVY-12721
Project: Groovy
Issue Type: Improvement
Affects Versions: 6.0.0
Reporter: Scott Murphy Heiberg
{{Awaitable.all}}, {{any}}, {{first}} and {{allSettled}} take {{Object...
sources}}. A caller holding a list of tasks, the usual shape when the tasks
come out of {{collect}}, has to spread it: {{Awaitable.allSettled(*tasks)}}.
Passing the list itself compiles and fails at run time with a message about the
list's class:
{code:groovy}
def tasks = ['a', 'b', 'c'].collect { m -> async { fetch(m) } }
def results = await Awaitable.allSettled(tasks)
{code}
{noformat}
IllegalArgumentException: No Awaitable adapter found for type:
java.util.ArrayList. Register an AwaitableAdapter via ServiceLoader or
AwaitableAdapterRegistry.register().
{noformat}
JavaScript's {{Promise.all}}, {{allSettled}}, {{any}} and {{race}} take an
iterable, so this is the form people, and the models trained on them, write
first. A single argument that is a {{Collection}} has no other meaning today,
since a collection is never awaitable, so the combinators can take it as the
list of sources.
Proposal: in {{AwaitCombinators}}, when {{sources}} has one element and it is a
{{Collection}}, use its elements; the empty and null checks of {{any}} and
{{first}} then apply to those elements. {{Awaitable.all(*tasks)}} keeps
working. A sentence in the combinator summary of core-async-await.adoc and in
the {{@param sources}} Javadoc.
Found while scoring Groovy 6.0.0 code written by a language model: with the
Groovy documentation available to it through a tool, GPT-6 still wrote the list
form.
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)