That's because it's withDefault { 1 } ;)
2015-09-29 10:05 GMT+02:00 Dinko Srkoč <[email protected]>:
> On 29 September 2015 at 09:58, Cédric Champeau
> <[email protected]> wrote:
> > This looks like a bug. Would be interesting to look at the bytecode to
> check
> > what method is called for x[n].
>
> Curiously, I tried to do just that in the Groovy AST Browser and, for
> the following piece of code:
>
> @groovy.transform.CompileStatic
> def foo() {
> [].withDefault(1)
> }
>
> got this:
>
> Unable to produce AST for this phase due to earlier compilation error:
> startup failed:
> script1443513793544.groovy: 3: [Static type checking] - Cannot find
> matching method java.util.List#withDefault(int). Please check if the
> declared type is right and if the method exists.
> @ line 3, column 5.
> [].withDefault(1)
> ^
>
> That's Groovy 2.4.4
>
> Cheers,
> Dinko
>
> >
> > 2015-09-29 9:54 GMT+02:00 Søren Berg Glasius <[email protected]>:
> >>
> >> Hi Fellows,
> >>
> >> I stumbled upon this today.
> >>
> >> This code runs:
> >>
> >> class Test {
> >> private List<Integer> x = [].withDefault { 0 }
> >> Integer getValue(int n) {
> >> return x[n]
> >> }
> >> }
> >> assert new Test().getValue(5) == 0
> >>
> >> where as when I compile static:
> >>
> >> @CompileStatic
> >> class Test {
> >> private List<Integer> x = [].withDefault { 0 }
> >> Integer getValue(int n) {
> >> return x[n]
> >> }
> >> }
> >> assert new Test().getValue(5) == 0
> >>
> >> I get an assertion failed, because new Test().getValue(5) == null
> >>
> >> Is this expected behavior or a bug?
> >>
> >>
> >> Best regards / Med venlig hilsen,
> >> Søren Berg Glasius
> >>
> >> Hedevej 1, Gl. Rye, 8680 Ry, Denmark
> >> Mobile: +45 40 44 91 88, Skype: sbglasius
> >> --- Press ESC once to quit - twice to save the changes.
> >
> >
>