You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Marc Hadfield (JIRA)" <ji...@apache.org> on 2015/05/31 18:15:17 UTC
[jira] [Created] (GROOVY-7443) instantiating a class withTraits
does not use the classloader of the trait
Marc Hadfield created GROOVY-7443:
-------------------------------------
Summary: 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.4.3, 2.3.7
Environment: jvm 1.7, MaxOSX
Reporter: Marc Hadfield
this fails:
def aWithB = new ClassA().withTraits(traitB)
when traitB is not from the system classloader.
full example code:
<code>
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)