You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Jochen Theodorou (JIRA)" <ji...@apache.org> on 2015/06/03 08:33:49 UTC

[jira] [Updated] (GROOVY-7443) instantiating a class withTraits does not use the classloader of the trait

     [ https://issues.apache.org/jira/browse/GROOVY-7443?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Jochen Theodorou updated GROOVY-7443:
-------------------------------------
    Labels: class-generation traits usertask  (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
>              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>
> 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)