[ https://issues.apache.org/jira/browse/GROOVY-7443?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15404415#comment-15404415 ]
Jochen Theodorou commented on GROOVY-7443: ------------------------------------------ what seems to happens is that we use the loader of ClassA or ClassB to create the proxy. This loader may not know the trait class and then it would fail loading the proxy class. I think the OP was trying to create such a situation using the context loader. And I would say, that this is supposed to work regardless of the loader the interface comes from > 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 > 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)