Fix fir-related problems and tests for inferring self types
This commit is contained in:
@@ -249,7 +249,7 @@ interface ConeTypeContext : TypeSystemContext, TypeSystemOptimizationContext, Ty
|
||||
is FirAnonymousObjectSymbol -> symbol.fir.typeParameters.map { it.symbol.toLookupTag() }
|
||||
is FirRegularClassSymbol -> symbol.fir.typeParameters.map { it.symbol.toLookupTag() }
|
||||
is FirTypeAliasSymbol -> symbol.fir.typeParameters.map { it.symbol.toLookupTag() }
|
||||
else -> error("Unexpected FirClassLikeSymbol $symbol for ${this::class}, with classId ${(this as? ConeClassLikeLookupTag)?.classId}")
|
||||
else -> emptyList()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+6
-6
@@ -6,17 +6,17 @@ class Builder<B : Builder<B>> {
|
||||
}
|
||||
|
||||
fun testStar(builder: Builder<*>) {
|
||||
builder.test()
|
||||
builder.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>test<!>()
|
||||
|
||||
builder
|
||||
.test()
|
||||
.foo()
|
||||
.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>test<!>()
|
||||
.<!UNRESOLVED_REFERENCE!>foo<!>()
|
||||
}
|
||||
|
||||
fun <K : Builder<K>> testTypeParam(builder: Builder<K>) {
|
||||
builder.test()
|
||||
builder.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>test<!>()
|
||||
|
||||
builder
|
||||
.test()
|
||||
.foo()
|
||||
.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>test<!>()
|
||||
.<!UNRESOLVED_REFERENCE!>foo<!>()
|
||||
}
|
||||
+1
-1
@@ -5,6 +5,6 @@ interface BodySpec<B, S : BodySpec<B, S>> {
|
||||
}
|
||||
|
||||
fun test(b: BodySpec<String, *>) {
|
||||
val x = b.isEqualTo("")
|
||||
val x = b.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>isEqualTo<!>("")
|
||||
x
|
||||
}
|
||||
+4
-4
@@ -1,10 +1,10 @@
|
||||
// !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("ERROR CLASS: Cannot infer argument for type parameter B")!>WriterAppender.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>newBuilder<!>()<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("WriterAppender.Builder1<ERROR CLASS: Cannot infer argument for type parameter B>")!>WriterAppender.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Builder1<!>()<!>
|
||||
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("{Builder1<*> & Builder2<*>}")!>WriterAppender.intersectTwoSelfTypes()<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("ERROR CLASS: Cannot infer argument for type parameter B")!>WriterAppender.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>intersectTwoSelfTypes<!>()<!>
|
||||
}
|
||||
|
||||
object WriterAppender {
|
||||
@@ -12,7 +12,7 @@ object WriterAppender {
|
||||
|
||||
class Builder1<B : Builder1<B>> {
|
||||
fun asBuilder(): B {
|
||||
return this <!UNCHECKED_CAST!>as B<!>
|
||||
return this as B
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+7
-7
@@ -16,11 +16,11 @@ class Builder<B : Builder<B>> {
|
||||
}
|
||||
|
||||
fun testStar(builder: Builder<*>) {
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("Builder<*>")!>builder.test()<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("ERROR CLASS: Cannot infer argument for type parameter T")!>builder.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>test<!>()<!>
|
||||
|
||||
builder
|
||||
.test()
|
||||
.foo()
|
||||
.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>test<!>()
|
||||
.<!UNRESOLVED_REFERENCE!>foo<!>()
|
||||
}
|
||||
|
||||
fun <K : Builder<K>> testTypeParam(builder: Builder<K>) {
|
||||
@@ -32,15 +32,15 @@ fun <K : Builder<K>> testTypeParam(builder: Builder<K>) {
|
||||
}
|
||||
|
||||
fun testStarJava(builder: JavaBuilder<*>) {
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("Builder<*>")!>builder.test()<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("ERROR CLASS: Cannot infer argument for type parameter T")!>builder.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>test<!>()<!>
|
||||
|
||||
builder
|
||||
.test()
|
||||
.foo()
|
||||
.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>test<!>()
|
||||
.<!UNRESOLVED_REFERENCE!>foo<!>()
|
||||
}
|
||||
|
||||
fun <K : JavaBuilder<K>> testTypeParamJava(builder: JavaBuilder<K>) {
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("K")!>builder.test()<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("K..K?!")!>builder.test()<!>
|
||||
|
||||
builder
|
||||
.test()
|
||||
|
||||
+4
-4
@@ -13,11 +13,11 @@ interface BodySpec<B, S : BodySpec<B, S>> {
|
||||
}
|
||||
|
||||
fun test(b: BodySpec<String, *>) {
|
||||
val x = b.isEqualTo("")
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("BodySpec<*, *>")!>x<!>
|
||||
val x = b.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>isEqualTo<!>("")
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("ERROR CLASS: Cannot infer argument for type parameter T")!>x<!>
|
||||
}
|
||||
|
||||
fun testJava(b: JavaBodySpec<String, *>) {
|
||||
val x = b.isEqualTo("")
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("BodySpec<*, *>")!>x<!>
|
||||
val x = b.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>isEqualTo<!>("")
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("ERROR CLASS: Cannot infer argument for type parameter T")!>x<!>
|
||||
}
|
||||
|
||||
+5
-5
@@ -22,14 +22,14 @@ 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()<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("WriterAppender.Builder1<*> & WriterAppender.Builder2<*>")!>WriterAppender.intersectTwoSelfTypes()<!>
|
||||
}
|
||||
|
||||
fun testJava(appender: JavaWriterAppender) {
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("WriterAppender.Builder1<*>")!>appender.newBuilder()<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("WriterAppender.Builder1<out WriterAppender.Builder1<*>>")!>appender.Builder1()<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("JavaWriterAppender.Builder1<*>..JavaWriterAppender.Builder1<*>?!")!>appender.newBuilder()<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("JavaWriterAppender.Builder1<out JavaWriterAppender.Builder1<*>..JavaWriterAppender.Builder1<*>?!>")!>appender.Builder1()<!>
|
||||
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("{Builder1<*> & Builder2<*>}")!>appender.intersectTwoSelfTypes()<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("JavaWriterAppender.Builder1<*>..JavaWriterAppender.Builder1<*>?! & JavaWriterAppender.Builder2<*>..JavaWriterAppender.Builder2<*>?!..JavaWriterAppender.Builder1<*>? & JavaWriterAppender.Builder2<*>?")!>appender.intersectTwoSelfTypes()<!>
|
||||
}
|
||||
|
||||
object WriterAppender {
|
||||
@@ -37,7 +37,7 @@ object WriterAppender {
|
||||
|
||||
class Builder1<B : Builder1<B>> {
|
||||
fun asBuilder(): B {
|
||||
return this <!UNCHECKED_CAST!>as B<!>
|
||||
return this as B
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user