Files
kotlin-fork/compiler/testData/cli/jvm/selfUpperBoundInference.kt
T
2021-08-04 17:36:52 +03:00

52 lines
965 B
Kotlin
Vendored

class Builder<B : Builder<B>> {
fun <T : B> test(): T = TODO()
fun foo() {}
}
fun testStar(builder: Builder<*>) {
builder.test()
builder
.test()
.foo()
}
fun <K : Builder<K>> testTypeParam(builder: Builder<K>) {
builder.test()
builder
.test()
.foo()
}
interface BodySpec<B, S : BodySpec<B, S>> {
fun <T : S> isEqualTo(expected: B): T
}
fun test(b: BodySpec<String, *>) {
b.isEqualTo("")
WriterAppender.newBuilder()
WriterAppender.Builder1()
WriterAppender.intersectTwoSelfTypes()
}
object WriterAppender {
interface Builder2<K : Builder2<K>>
class Builder1<B : Builder1<B>> {
fun asBuilder(): B {
return this as B
}
}
fun <B : Builder1<B>> newBuilder(): B {
return Builder1<B>().asBuilder()
}
fun <B> intersectTwoSelfTypes(): B where B : Builder1<B>, B: Builder2<B> {
return Builder1<B>().asBuilder()
}
}