groovy-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (GROOVY-7443) instantiating a class withTraits does not use the classloader of the trait
Date Wed, 03 Aug 2016 01:57:20 GMT

    [ https://issues.apache.org/jira/browse/GROOVY-7443?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15405170#comment-15405170
] 

ASF GitHub Bot commented on GROOVY-7443:
----------------------------------------

Github user asfgit closed the pull request at:

    https://github.com/apache/groovy/pull/34


> 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)

Mime
View raw message