[
https://issues.apache.org/jira/browse/GROOVY-7443?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Paul King resolved GROOVY-7443.
-------------------------------
Resolution: Fixed
Assignee: Paul King
Fix Version/s: 2.5.0-beta-1
> 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
> Labels: class-generation, traits
> Fix For: 2.5.0-beta-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
(v6.3.4#6332)