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

Eric Milles reassigned GROOVY-11242:
------------------------------------

    Assignee: Eric Milles

> Stackoverflow error when calling super from overridden method
> -------------------------------------------------------------
>
>                 Key: GROOVY-11242
>                 URL: https://issues.apache.org/jira/browse/GROOVY-11242
>             Project: Groovy
>          Issue Type: Bug
>          Components: Static compilation
>    Affects Versions: 3.0.14, 3.0.15, 3.0.16, 3.0.17, 3.0.18, 3.0.19
>            Reporter: Mattias Reichel
>            Assignee: Eric Milles
>            Priority: Major
>              Labels: StackOverflowError
>             Fix For: 4.0.0-alpha-1
>
>
> The following script throws Stackoverflow error when calling super.add(Object 
> o) from overridden add(Object o) (it ends up calling itself). With 
> @CompileDynamic on the overridden method the code works.
>  
> {code:java}
> import groovy.transform.CompileStatic
> @CompileStatic
> class MySet extends DirtyCheckingSet {
>     MySet(Set delegate, DirtyCheckable entity, String propertyName) {
>         super(delegate, entity, propertyName)
>     }
>     @Override
>     boolean add(Object o) {
>         def added = super.add(o) // <-- Offending command
>         println "Added $o"
>         return added
>     }
> }
> @CompileStatic
> class MyEntity implements DirtyCheckable {
>     String myProperty
> }
> @CompileStatic
> class DirtyCheckingSet extends DirtyCheckingCollection implements Set {
>     DirtyCheckingSet(Set target, DirtyCheckable parent, String property) {
>         super(target, parent, property)
>     }
> }
> @CompileStatic
> trait DirtyCheckable {
>     void markDirty(String propertyName) {
>         println "$propertyName marked dirty"
>     }
> }
> @CompileStatic
> class DirtyCheckingCollection implements Collection {
>     
>     final @Delegate Collection target
>     final DirtyCheckable parent
>     final String property
>     
>     DirtyCheckingCollection(Collection target, DirtyCheckable parent, String 
> property) {
>         this.target = target
>         this.parent = parent
>         this.property = property
>     }
>     @Override
>     boolean add(Object o) {
>         parent.markDirty(property)
>         target.add(o)
>     }
> }
> MySet set = new MySet([] as Set, new MyEntity([myProperty: 'hello']), 
> 'myProperty')
> set.add('myProperty')
> {code}
>  



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

Reply via email to