[
https://issues.apache.org/jira/browse/GROOVY-7443?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Eric Milles updated GROOVY-7443:
--------------------------------
Labels: class-generation trait traits (was: class-generation traits)
> 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
> Assignee: Paul King
> Priority: Major
> Labels: class-generation, trait, traits
> Fix For: 2.5.0-alpha-1
>
> 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
(v8.3.4#803005)