[ https://issues.apache.org/jira/browse/GROOVY-7909?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15521890#comment-15521890 ]
ASF GitHub Bot commented on GROOVY-7909: ---------------------------------------- GitHub user blindpirate opened a pull request: https://github.com/apache/groovy/pull/432 GROOVY-7909 Calling parents method from trait using Parent.super.method() fail depending on trait declaration order You can merge this pull request into a Git repository by running: $ git pull https://github.com/blindpirate/groovy groovy7909 Alternatively you can review and apply these changes as the patch at: https://github.com/apache/groovy/pull/432.patch To close this pull request, make a commit to your master/trunk branch with (at least) the following in the commit message: This closes #432 ---- commit 546dd0dcbf4c340624a5ec5a23bc92500e729a54 Author: zhangbo <zhan...@nanchao.org> Date: 2016-09-26T02:29:16Z groovy 7909 bug ---- > Calling parents method from trait using Parent.super.method() fail depending > on trait declaration order > ------------------------------------------------------------------------------------------------------- > > Key: GROOVY-7909 > URL: https://issues.apache.org/jira/browse/GROOVY-7909 > Project: Groovy > Issue Type: Bug > Components: Compiler > Affects Versions: 2.4.7 > Environment: Grails 3.1.9 > Reporter: Sébastien Collin > Priority: Critical > > I'm using trait for multiple inheritance and I faced an issue when compiling > my project (using Grails 3.1.9, so with the gradle task CompileGroovy). > My traits are sharing a common method ({{def method()}}) and I'm referencing > parent's version through ParentClassName.super.method() > I'm seeing this error: > {quote} > > BUG! exception in phase 'semantic analysis' in source unit 'xxx.groovy' > > ClassNode#getTypeClass for YYY is called before the type class is set > {quote} > When testing different cases it seems that this problem appears because > classes are not compiled in the right order. > For example, a script with > {code} > trait Three implements One, Two { > def postMake() { > One.super.postMake() > Two.super.postMake() > println "Three" > } > } > trait One { > def postMake() { println "One"} > } > trait Two { > def postMake() { println "Two"} > } > class Four implements Three { > def make() { > Three.super.postMake() > println "All done?" > } > } > Four f = new Four() > f.make() > {code} > will fail, whereas putting Three method after One and Two will succeed. > Beside, keeping this trait's declaration order but changing method names to > be unique (and removing {{XXX.super}}) will compile and execute correctly. > I hope I'm clear enough... -- This message was sent by Atlassian JIRA (v6.3.4#6332)