Jason Garrett created GROOVY-10922:
--------------------------------------

             Summary: stack overflow calling implicit getter/setter from 
override
                 Key: GROOVY-10922
                 URL: https://issues.apache.org/jira/browse/GROOVY-10922
             Project: Groovy
          Issue Type: Bug
          Components: Compiler
    Affects Versions: 2.5.21, 2.5.20, 3.0.14, 2.5.19
            Reporter: Jason Garrett


In the following situation, under static compilation:
 * An interface declares a getter and/or setter
 * An implementing class declares a property of the corresponding name and 
type, so the implicit getter and/or setter implement the interface
 * A subclass overrides the getter/setter and calls the super getter/setter

the subclass getter/setter will recurse instead of calling the superclass 
implicit method.

This appears to have been introduced in 3.0.14.

Running the main method in this example will reproduce the stack overflow.
{code:java}
package example

import groovy.transform.CompileStatic

@CompileStatic
class SuperImplicitSetter {
   interface FooHaving {
      String getFoo()
      void setFoo(String foo)
   }

   static class Foo implements FooHaving {
      String foo  // implements interface
   }

   static class Bar extends Foo {
      String bar

      @Override
      void setFoo(String foo) {
         super.setFoo(foo)  // recurses instead of calling implicit 
Foo.setFoo(String)
         bar = foo
      }
   }

   static void main(String[] args) {
      Bar bar = new Bar()
      bar.setFoo("bar")  // stack overflow
      println bar.foo
   }
}
 {code}



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

Reply via email to