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

Eric Milles resolved GROOVY-11453.
----------------------------------
    Fix Version/s: 5.0.0-alpha-11
       Resolution: Fixed

https://github.com/apache/groovy/commit/c6d0cb54190a33d38f71081ea475e4b89383893f

> Spread-safe operator differences and efficiencies
> -------------------------------------------------
>
>                 Key: GROOVY-11453
>                 URL: https://issues.apache.org/jira/browse/GROOVY-11453
>             Project: Groovy
>          Issue Type: Bug
>          Components: Static compilation
>            Reporter: Eric Milles
>            Assignee: Eric Milles
>            Priority: Major
>             Fix For: 5.0.0-alpha-11
>
>
> The spread-safe operator -- aka {{a*.b}} or {{a*.b(c)}} -- has some 
> differences and inefficiencies.
> # When the receiver is null, the expression produces null for dynamic mode 
> and an empty list for static compilation.  Can this difference be safely 
> resolved?
> # When the method return type is {{void}}, there is no need for a list to 
> collect up nulls.  This is producing "Useless object stored in variable 
> var$1" warnings from SpotBugs.  The only benefit of this is the ability to 
> detect the number of elements.
> # The SC bytecode has a redundant null test in it.  Since a for loop is also 
> null-safe, guarding the loop bytecode by a null check is producing "Redundant 
> check for null" warnings from SpotBugs.  *NOTE:* If (1) above is changed in 
> the SC classgen, the null check may not be redundant as it would guard list 
> construction.
> For reference, {{object*.method(arguments)}} is written by the static 
> compiler like this:
> {code:groovy}
> def result = new ArrayList()
> if (object != null) {
>   for (Inferred element : object) { // also null-safe
>     result.add(element?.method(arguments)
>   }
> }
> result
> {code}
> And the dynamic impl: 
> https://github.com/apache/groovy/blob/f46103d31b7574ce883ff3b6c01fa8a412f225be/src/main/java/org/codehaus/groovy/runtime/ScriptBytecodeAdapter.java#L189
> GROOVY-7177



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to