Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
2.4.0
-
None
-
None
Description
The attached traitgenerics.zip contains the following code:
src/main/groovy/demo/SomeTrait.groovy
package demo
trait SomeTrait<T> {
}
src/main/groovy/demo/SomeOtherTrait.groovy
package demo
trait SomeOtherTrait {
def <T> T someOtherMethod() {
}
}
src/main/groovy/demo/TopClass.groovy
package demo class TopClass<T> implements SomeTrait<T>, SomeOtherTrait {}
src/main/groovy/demo/MiddleClass.groovy
package demo class MiddleClass<T> extends TopClass<T> implements SomeTrait<T>, SomeOtherTrait {}
src/main/groovy/demo/BottomClass.groovy
package demo class BottomClass extends MiddleClass<String> implements SomeTrait<String>, SomeOtherTrait {}
The code will not compile:
$ ./gradlew clean cG :clean :compileJava UP-TO-DATE :compileGroovy startup failed: /Users/jeff/traitgenerics/src/main/groovy/demo/BottomClass.groovy: -1: The return type of java.lang.Object someOtherMethod() in demo.BottomClass is incompatible with java.lang.String in demo.MiddleClass . At [-1:-1] @ line -1, column -1. 1 error :compileGroovy FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':compileGroovy'. > Compilation failed; see the compiler error output for details. * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. BUILD FAILED Total time: 4.054 secs
If I change the type parameter name in SomeOtherTrait to anyting other than T, it compiles...
src/main/groovy/demo/SomeOtherTrait.groovy
package demo
trait SomeOtherTrait {
def <SOM> SOM someOtherMethod() {
}
}