Details
Description
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:
> BUG! exception in phase 'semantic analysis' in source unit 'xxx.groovy' ClassNode#getTypeClass for YYY is called before the type class is set
When testing different cases it seems that this problem appears because classes are not compiled in the right order.
For example, a script with
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()
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...