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

Steinar Haugen updated GROOVY-7714:
-----------------------------------
    Description: 
Bumped into a compilation error and created a minimal project to reproduce.

It consists of a gradle project with two subprojects. The first subproject 
contains a trait and an implementing class. The second subproject contains a 
class that returns the implemening class. 

See attached zip file for source code. 

It consists of three source files:
{code:title=sub1/src/main/groovy/sub1/MyTrait.groovy}
package sub1
trait MyTrait {
    static <T extends MyTrait> T getMyTrait() {null}
}
{code}

{code:title=sub1/src/main/groovy/sub1/MyTraitImpl.groovy}
package sub1
class MyTraitImpl implements MyTrait {
}
{code}

{code:title=sub2/src/main/groovy/sub2/Producer.groovy}
package sub2
import sub1.MyTraitImpl
class Producer {
    MyTraitImpl produce() {
        return null
    }
}
{code}

Building yields the following error message:
Execution failed for task ':sub2:compileGroovy'.
> BUG! exception in phase 'class generation' in source unit 
> '/source/trait-bug/sub2/src/main/groovy/sub2/Producer.groovy' Type is null. 
> Most probably you let a transform reuse existing ClassNodes with generics 
> information, that is now used in a wrong context.

If the source code in sub2 is moved to sub1, it compiles without error.

If generics is removed from the method signature in MyTrait (i.e. changed to 
something like "static MyTrait getMyTrait()") it compiles without error.

  was:
Bumped into a compilation error and created a minimal project to reproduce.

It consists of a gradle project with two subprojects. The first subproject 
contains a trait and an implementing class. The second subproject contains a 
class that returns the implemening class. 

See attached zip file for source code. 

It consists of three source files:
{code:title=sub1/src/main/groovy/sub1/MyTrait.groovy}
package sub1
trait MyTrait {
    static <T extends MyTrait> T getMyTrait() {null}
}
{code}

{code:title=sub1/src/main/groovy/sub1/MyTraitImpl.groovy}
package sub1
class MyTraitImpl implements MyTrait {
}
{code}

{code:title=sub2/src/main/groovy/sub2/Producer.groovy}
package sub2
import sub1.MyTraitImpl
class Producer {
    MyTraitImpl produce() {
        return null
    }
}
{code}

Building yields the following error message:
Execution failed for task ':sub2:compileGroovy'.
> BUG! exception in phase 'class generation' in source unit 
> '/source/trait-bug/sub2/src/main/groovy/sub2/Producer.groovy' Type is null. 
> Most probably you let a transform reuse existing ClassNodes with generics 
> information, that is now used in a wrong context.

If the source code in sub2 is moved to sub1, it compiles without error.

If the method signature is changed to "MyTrait getMyTrait()" it compiles 
without error.


> Trait with static generic method and usage in different sub-project
> -------------------------------------------------------------------
>
>                 Key: GROOVY-7714
>                 URL: https://issues.apache.org/jira/browse/GROOVY-7714
>             Project: Groovy
>          Issue Type: Bug
>    Affects Versions: 2.4.5
>            Reporter: Steinar Haugen
>         Attachments: trait-bug.zip
>
>
> Bumped into a compilation error and created a minimal project to reproduce.
> It consists of a gradle project with two subprojects. The first subproject 
> contains a trait and an implementing class. The second subproject contains a 
> class that returns the implemening class. 
> See attached zip file for source code. 
> It consists of three source files:
> {code:title=sub1/src/main/groovy/sub1/MyTrait.groovy}
> package sub1
> trait MyTrait {
>     static <T extends MyTrait> T getMyTrait() {null}
> }
> {code}
> {code:title=sub1/src/main/groovy/sub1/MyTraitImpl.groovy}
> package sub1
> class MyTraitImpl implements MyTrait {
> }
> {code}
> {code:title=sub2/src/main/groovy/sub2/Producer.groovy}
> package sub2
> import sub1.MyTraitImpl
> class Producer {
>     MyTraitImpl produce() {
>         return null
>     }
> }
> {code}
> Building yields the following error message:
> Execution failed for task ':sub2:compileGroovy'.
> > BUG! exception in phase 'class generation' in source unit 
> > '/source/trait-bug/sub2/src/main/groovy/sub2/Producer.groovy' Type is null. 
> > Most probably you let a transform reuse existing ClassNodes with generics 
> > information, that is now used in a wrong context.
> If the source code in sub2 is moved to sub1, it compiles without error.
> If generics is removed from the method signature in MyTrait (i.e. changed to 
> something like "static MyTrait getMyTrait()") it compiles without error.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to