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

Paul King closed GROOVY-11299.
------------------------------

> ClassNode getField(String), getMethods(String) and others return from super 
> interface when class uses extends
> -------------------------------------------------------------------------------------------------------------
>
>                 Key: GROOVY-11299
>                 URL: https://issues.apache.org/jira/browse/GROOVY-11299
>             Project: Groovy
>          Issue Type: Bug
>            Reporter: Eric Milles
>            Assignee: Eric Milles
>            Priority: Major
>              Labels: traits
>             Fix For: 5.0.0-alpha-6
>
>
> Consider the following:
> {code:groovy}
> trait A {
>   def m() {}
> }
> trait B extends A {
> }
> {code}
> Calling {{ClassNode#getMehtod(String)}} before the canonicalization compile 
> phase returns "m()".  Normally a super-trait or super-interface method would 
> not be returned -- when appearing in the {{implements}} clause for example.
> The test cases of GROOVY-8272 and GROOVY-10312 are examples of where this 
> comes up.
> {code:groovy}
> trait A {
>   static sm() {
>     'A'
>   }
> }
> trait B extends A {
>   String m() {
>     sm().toLowerCase()
>   }
> }
> class C implements B {
> }
> print(new C().m())
> {code}
> {{StaticImportVisitor}} runs during semantic analysis before the trait 
> transform has moved {{A}} from super class to super interface.  Asking for 
> the methods "sm" of {{B}} returns the method of {{A}} and so "sm()" is 
> transformed into the static call "B.sm()".  Leaving the method call unchanged 
> allows it to be resolved through other trait means and fixes 8272, 10312 
> without dynamic dispatch (of trait helpers) that was added in Groovy 5.



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

Reply via email to