I'm doing some experiments with traits in scriptrunner and am running the following code in the console
import groovy.transform.SelfType
class Thing {
String color
Thing(String color) {
this.color = color
}
String doSomething() {
"something"
}
@Override
String toString() {
"${color} thing"
}
}
//@SelfType(Thing)
trait Alpha {
String alpha() {
"alpha ${this}"
}
String alphaSomething() {
"alpha ${this.doSomething()}"
}
}
StringBuilder out = new StringBuilder()
out << "<pre class=\"dark\">\n"
Thing blueThing = new Thing("blue")
out << "${blueThing} (${blueThing.class})\n" // blue thing (class Thing)
def alphaThing = blueThing.withTraits Alpha
out << "${alphaThing} (${alphaThing.class})\n" // Thing18_groovyProxy@236366b2 (class Thing18_groovyProxy)
out << "${alphaThing.doSomething()}\n" // something
out << "${alphaThing.alpha()}, ${alphaThing.alphaSomething()}\n" // alpha Thing18_groovyProxy@236366b2, alpha something
out << "</pre>\n"
out.toString()
When I remove the comment on @SelfType(Thing) I get the following compilation error
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: Alpha$TraitAdapterwrapper: -1: class 'Alpha$TraitAdapter' implements trait 'Alpha' but does not extend self type class 'Thing' @ line -1, column -1. 1 error