Put the type inference on calls with self types under the compiler flag
This commit is contained in:
+2
@@ -1,3 +1,5 @@
|
||||
// !LANGUAGE: -TypeInferenceOnCallsWithSelfTypes
|
||||
|
||||
class Builder<B : Builder<B>> {
|
||||
fun <T : B> test(): T = TODO()
|
||||
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
// !LANGUAGE: -TypeInferenceOnCallsWithSelfTypes
|
||||
|
||||
class Builder<B : Builder<B>> {
|
||||
fun <T : B> test(): T = TODO()
|
||||
|
||||
fun foo() {}
|
||||
}
|
||||
|
||||
fun testStar(builder: Builder<*>) {
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("Type is unknown")!>builder.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>test<!>()<!>
|
||||
|
||||
builder
|
||||
.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>test<!>()
|
||||
.<!DEBUG_INFO_MISSING_UNRESOLVED!>foo<!>()
|
||||
}
|
||||
|
||||
fun <K : Builder<K>> testTypeParam(builder: Builder<K>) {
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("Type is unknown")!>builder.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>test<!>()<!>
|
||||
|
||||
builder
|
||||
.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>test<!>()
|
||||
.<!DEBUG_INFO_MISSING_UNRESOLVED!>foo<!>()
|
||||
}
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
// !LANGUAGE: -TypeInferenceOnCallsWithSelfTypes
|
||||
|
||||
interface BodySpec<B, S : BodySpec<B, S>> {
|
||||
fun <T : S> isEqualTo(expected: B): T
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
// !LANGUAGE: -TypeInferenceOnCallsWithSelfTypes
|
||||
|
||||
interface BodySpec<B, S : BodySpec<B, S>> {
|
||||
fun <T : S> isEqualTo(expected: B): T
|
||||
}
|
||||
|
||||
fun test(b: BodySpec<String, *>) {
|
||||
val x = b.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>isEqualTo<!>("")
|
||||
<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE, DEBUG_INFO_EXPRESSION_TYPE("[ERROR : Type for b.isEqualTo("")]")!>x<!>
|
||||
}
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
// !LANGUAGE: -TypeInferenceOnCallsWithSelfTypes
|
||||
|
||||
fun test() {
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("WriterAppender.Builder1<*>")!>WriterAppender.newBuilder()<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("WriterAppender.Builder1<out WriterAppender.Builder1<*>>")!>WriterAppender.Builder1()<!>
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
// !LANGUAGE: -TypeInferenceOnCallsWithSelfTypes
|
||||
|
||||
fun test() {
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("Type is unknown")!>WriterAppender.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>newBuilder<!>()<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("Type is unknown")!>WriterAppender.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Builder1<!>()<!>
|
||||
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("Type is unknown")!>WriterAppender.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>intersectTwoSelfTypes<!>()<!>
|
||||
}
|
||||
|
||||
object WriterAppender {
|
||||
interface Builder2<K : Builder2<K>>
|
||||
|
||||
class Builder1<B : Builder1<B>> {
|
||||
fun asBuilder(): B {
|
||||
return this <!UNCHECKED_CAST!>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()
|
||||
}
|
||||
}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
// !LANGUAGE: +TypeInferenceOnCallsWithSelfTypes
|
||||
|
||||
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()
|
||||
}
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
// !LANGUAGE: +TypeInferenceOnCallsWithSelfTypes
|
||||
|
||||
class Builder<B : Builder<B>> {
|
||||
fun <T : B> test(): T = TODO()
|
||||
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
package
|
||||
|
||||
public fun testStar(/*0*/ builder: Builder<*>): kotlin.Unit
|
||||
public fun </*0*/ K : Builder<K>> testTypeParam(/*0*/ builder: Builder<K>): kotlin.Unit
|
||||
|
||||
public final class Builder</*0*/ B : Builder<B>> {
|
||||
public constructor Builder</*0*/ B : Builder<B>>()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public final fun foo(): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public final fun </*0*/ T : B> test(): T
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
// !LANGUAGE: +TypeInferenceOnCallsWithSelfTypes
|
||||
|
||||
interface BodySpec<B, S : BodySpec<B, S>> {
|
||||
fun <T : S> isEqualTo(expected: B): T
|
||||
}
|
||||
|
||||
fun test(b: BodySpec<String, *>) {
|
||||
val x = b.isEqualTo("")
|
||||
x
|
||||
}
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
// !LANGUAGE: +TypeInferenceOnCallsWithSelfTypes
|
||||
|
||||
interface BodySpec<B, S : BodySpec<B, S>> {
|
||||
fun <T : S> isEqualTo(expected: B): T
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
package
|
||||
|
||||
public fun test(/*0*/ b: BodySpec<kotlin.String, *>): kotlin.Unit
|
||||
|
||||
public interface BodySpec</*0*/ B, /*1*/ S : BodySpec<B, S>> {
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public abstract fun </*0*/ T : S> isEqualTo(/*0*/ expected: B): T
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
// !LANGUAGE: +TypeInferenceOnCallsWithSelfTypes
|
||||
|
||||
fun test() {
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("WriterAppender.Builder1<*>")!>WriterAppender.newBuilder()<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("WriterAppender.Builder1<out WriterAppender.Builder1<*>>")!>WriterAppender.Builder1()<!>
|
||||
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("{Builder1<*> & Builder2<*>}")!>WriterAppender.intersectTwoSelfTypes()<!>
|
||||
}
|
||||
|
||||
object WriterAppender {
|
||||
interface Builder2<K : Builder2<K>>
|
||||
|
||||
class Builder1<B : Builder1<B>> {
|
||||
fun asBuilder(): B {
|
||||
return this <!UNCHECKED_CAST!>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()
|
||||
}
|
||||
}
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
// !LANGUAGE: +TypeInferenceOnCallsWithSelfTypes
|
||||
|
||||
fun test() {
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("WriterAppender.Builder1<*>")!>WriterAppender.newBuilder()<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("WriterAppender.Builder1<out WriterAppender.Builder1<*>>")!>WriterAppender.Builder1()<!>
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
package
|
||||
|
||||
public fun test(): kotlin.Unit
|
||||
|
||||
public object WriterAppender {
|
||||
private constructor WriterAppender()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public final fun </*0*/ B : WriterAppender.Builder1<B>> intersectTwoSelfTypes(): B where B : WriterAppender.Builder2<B>
|
||||
public final fun </*0*/ B : WriterAppender.Builder1<B>> newBuilder(): B
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
|
||||
public final class Builder1</*0*/ B : WriterAppender.Builder1<B>> {
|
||||
public constructor Builder1</*0*/ B : WriterAppender.Builder1<B>>()
|
||||
public final fun asBuilder(): B
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public interface Builder2</*0*/ K : WriterAppender.Builder2<K>> {
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user