You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Christopher Smith (Jira)" <ji...@apache.org> on 2022/04/25 23:13:00 UTC

[jira] [Updated] (GROOVY-10597) Permit spread operator in static mode for varargs

     [ https://issues.apache.org/jira/browse/GROOVY-10597?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Christopher Smith updated GROOVY-10597:
---------------------------------------
    Description: 
I have a varargs method that takes many parameters for inclusion into an output JSON array. I am needing to preprocess some of these parameters, and I tried to use the spread operator to deconstruct them inline. However, I'm receiving the error "The spread operator cannot be used" because the compiler can't determine arity.

This is perfectly sensible, but in the specific case where the spread operator would be applied in a position where its values expand into a varargs, as long as the element type produced by the spread is a subtype of the declared varargs type, it would be helpful for the spread to succeed.

Sample:
{code:groovy}
@CompileStatic
class Groovy10597 {
  static void output(int code, String[] widgets) {
    println "$code: ${Arrays.toString(widgets)}"
  }

  static List<String> createWidgets() {
    ['w1', 'w2']
  }

  static void sample() {
    output(42, 'w0', *createWidgets(), 'w3')
  } 
}
{code}

  was:
I have a varargs method that takes many parameters for inclusion into an output JSON array. I am needing to preprocess some of these parameters, and I tried to use the spread operator to deconstruct them inline. However, I'm receiving the error "The spread operator cannot be used" because the compiler can't determine arity.

This is perfectly sensible, but in the specific case where the spread operator would be applied in a position where its values expand into a varargs, as long as the element type produced by the spread is a subtype of the declared varargs type, it would be helpful for the spread to succeed.


> Permit spread operator in static mode for varargs
> -------------------------------------------------
>
>                 Key: GROOVY-10597
>                 URL: https://issues.apache.org/jira/browse/GROOVY-10597
>             Project: Groovy
>          Issue Type: Improvement
>          Components: Static Type Checker
>    Affects Versions: 4.0.2
>            Reporter: Christopher Smith
>            Priority: Minor
>
> I have a varargs method that takes many parameters for inclusion into an output JSON array. I am needing to preprocess some of these parameters, and I tried to use the spread operator to deconstruct them inline. However, I'm receiving the error "The spread operator cannot be used" because the compiler can't determine arity.
> This is perfectly sensible, but in the specific case where the spread operator would be applied in a position where its values expand into a varargs, as long as the element type produced by the spread is a subtype of the declared varargs type, it would be helpful for the spread to succeed.
> Sample:
> {code:groovy}
> @CompileStatic
> class Groovy10597 {
>   static void output(int code, String[] widgets) {
>     println "$code: ${Arrays.toString(widgets)}"
>   }
>   static List<String> createWidgets() {
>     ['w1', 'w2']
>   }
>   static void sample() {
>     output(42, 'w0', *createWidgets(), 'w3')
>   } 
> }
> {code}



--
This message was sent by Atlassian Jira
(v8.20.7#820007)