Fix fir-related problems and tests for inferring self types

This commit is contained in:
Victor Petukhov
2021-07-07 15:24:31 +03:00
parent 9e48ef85ea
commit 584facc95f
7 changed files with 28 additions and 28 deletions
@@ -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,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<!>()
}
@@ -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
}
@@ -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
}
}
@@ -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()
@@ -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<!>
}
@@ -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
}
}