[ 
https://issues.apache.org/jira/browse/GROOVY-7443?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14574715#comment-14574715
 ] 

Dariusz Kobylarz commented on GROOVY-7443:
------------------------------------------

Jochen, thanks for the quality comments. We have just created a PR and the bot 
caught that fact.

> instantiating a class withTraits does not use the classloader of the trait
> --------------------------------------------------------------------------
>
>                 Key: GROOVY-7443
>                 URL: https://issues.apache.org/jira/browse/GROOVY-7443
>             Project: Groovy
>          Issue Type: Bug
>          Components: groovy-runtime
>    Affects Versions: 2.3.7, 2.4.3
>         Environment: jvm 1.7, MaxOSX
>            Reporter: Marc Hadfield
>              Labels: class-generation, traits, usertask
>         Attachments: GroovyTraitsClassloaderTest.groovy
>
>
> this fails:
> def aWithB = new ClassA().withTraits(traitB)
> when traitB is not from the classloader of class A.
> full example code:
> {code:Java}
> package groovy.lang.traits
> import org.codehaus.groovy.control.CompilerConfiguration;
> class GroovyTraitsClassloaderTest {
>       static class ClassA {
>               
>       }
>       
>       static trait TraitA {
>               
>               def aMethod() {
>                       println "traitA method"
>               }
>               
>       }
>       
>       static main(args) {
>       
>               
>               def aWithA = new ClassA().withTraits(TraitA)
>               
>               aWithA.aMethod()
>               
>               
>               GroovyClassLoader gcl = new 
> GroovyClassLoader(Thread.currentThread().getContextClassLoader());
>               
>               Class classB = gcl.parseClass("""\
> class ClassB {}
> """)
>               
>               Class traitB = gcl.parseClass("""\
> trait TraitB {
>       
>       def bMethod() {
>               println "traitB method"
>       }
>       
> }
> """)
>               
>               //ok
>               def bWithA = classB.newInstance().withTraits(TraitA)
>               //ok
>               def bWithB = classB.newInstance().withTraits(traitB)
>               bWithB.bMethod()
>               
>               //fails
>               def aWithB = new ClassA().withTraits(traitB)
>               
>               aWithB.bMethod()
>               
>               
>       }
> }
> {code}



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

Reply via email to