[
https://issues.apache.org/jira/browse/GROOVY-7843?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Arnaud CAVAILHEZ updated GROOVY-7843:
-
Description:
A trait extending another and calling itself more than 3 times:
{code}@CompileStatic
trait UpperTrait {
void call(Closure body){
body()
}
}{code}
{code}@CompileStatic
trait LowerTrait extends UpperTrait {
void threeCalls() {
call {
call {
call {
}
}
}
}
}{code}
Will generate a `ClassCastException` when called:
{code}class ImplementsTrait implements LowerTrait {
}
new ImplementsTrait().threeCalls()
{code}
raises:
{code}Caught: java.lang.ClassCastException:
LowerTrait$Trait$Helper$_threeCalls_closure1 cannot be cast to UpperTrait
java.lang.ClassCastException: LowerTrait$Trait$Helper$_threeCalls_closure1
cannot be cast to UpperTrait
at
LowerTrait$Trait$Helper$_threeCalls_closure1$_closure2.doCall(LowerTrait.groovy:9)
etc..{code}
was:
A trait extending another and calling itself more than 3 times:
```@CompileStatic
trait UpperTrait {
void call(Closure body){
body()
}
}```
```@CompileStatic
trait LowerTrait extends UpperTrait {
void threeCalls() {
call {
call {
call {
}
}
}
}
}```
Will generate a `ClassCastException` when called:
```class ImplementsTrait implements LowerTrait {
}
new ImplementsTrait().threeCalls()
```
raises:
```Caught: java.lang.ClassCastException:
LowerTrait$Trait$Helper$_threeCalls_closure1 cannot be cast to UpperTrait
java.lang.ClassCastException: LowerTrait$Trait$Helper$_threeCalls_closure1
cannot be cast to UpperTrait
at
LowerTrait$Trait$Helper$_threeCalls_closure1$_closure2.doCall(LowerTrait.groovy:9)
etc..```
> Trait method calling closure cannot be inherited while using CompileStatic
> --
>
> Key: GROOVY-7843
> URL: https://issues.apache.org/jira/browse/GROOVY-7843
> Project: Groovy
> Issue Type: Bug
>Reporter: Arnaud CAVAILHEZ
>Priority: Minor
>
> A trait extending another and calling itself more than 3 times:
> {code}@CompileStatic
> trait UpperTrait {
> void call(Closure body){
> body()
> }
> }{code}
> {code}@CompileStatic
> trait LowerTrait extends UpperTrait {
> void threeCalls() {
> call {
> call {
> call {
> }
> }
> }
> }
> }{code}
> Will generate a `ClassCastException` when called:
> {code}class ImplementsTrait implements LowerTrait {
> }
> new ImplementsTrait().threeCalls()
> {code}
> raises:
> {code}Caught: java.lang.ClassCastException:
> LowerTrait$Trait$Helper$_threeCalls_closure1 cannot be cast to UpperTrait
> java.lang.ClassCastException: LowerTrait$Trait$Helper$_threeCalls_closure1
> cannot be cast to UpperTrait
> at
> LowerTrait$Trait$Helper$_threeCalls_closure1$_closure2.doCall(LowerTrait.groovy:9)
> etc..{code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)