[FIR] Report UNRESOLVED_REFERENCE on the first unresolved qualifier

#KT-55471 Fixed
This commit is contained in:
Kirill Rakhman
2023-08-28 12:44:36 +02:00
committed by Space Team
parent 40fadac060
commit 10f7989af6
69 changed files with 177 additions and 456 deletions
@@ -1,22 +0,0 @@
// !LANGUAGE: +ProhibitVisibilityOfNestedClassifiersFromSupertypesOfCompanion
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
open class Outer<E> {
inner class Inner<F>
}
class Derived : Outer<String>() {
// Inner<Int> here means Outer<String>.Inner<Int>
fun foo(x: Inner<Int>) {}
}
class A {
companion object : Outer<String>()
// Does not work, could be Outer<String>.Inner<Int>
// TODO: Should work?
fun foo(x: <!UNRESOLVED_REFERENCE!>Inner<Int><!>) {
// Inner<Char>() call use companion as implicit receiver
val y: Outer<String>.Inner<Char> = Inner<Char>()
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !LANGUAGE: +ProhibitVisibilityOfNestedClassifiersFromSupertypesOfCompanion
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
open class Outer<E> {
@@ -15,7 +15,7 @@ class A {
// Does not work, could be Outer<String>.Inner<Int>
// TODO: Should work?
fun foo(x: <!UNRESOLVED_REFERENCE!>Inner<Int><!>) {
fun foo(x: <!UNRESOLVED_REFERENCE!>Inner<!><Int>) {
// Inner<Char>() call use companion as implicit receiver
val y: Outer<String>.Inner<Char> = Inner<Char>()
}
@@ -7,14 +7,14 @@ open class Outer<X, Y> {
class Derived : Outer<String, Int>() {
fun foo(): Inner<Char> = null!!
fun baz(): <!UNRESOLVED_REFERENCE!>Alias<Char><!> = null!!
fun baz(): <!UNRESOLVED_REFERENCE!>Alias<!><Char> = null!!
}
class A : Outer<Double, Short>() {
class B : Outer<Float, Long>() {
fun bar(): Inner<String> = null!!
fun x(): <!UNRESOLVED_REFERENCE!>Alias<String><!> = null!!
fun x(): <!UNRESOLVED_REFERENCE!>Alias<!><String> = null!!
}
}
@@ -14,7 +14,7 @@ private fun <E> foobar() = {
class Derived : LocalOuter<Double, Short>() {
fun foo(): LocalInner<Long> = null!!
fun bar(): <!UNRESOLVED_REFERENCE!>LocalAlias<Char><!> = null!!
fun bar(): <!UNRESOLVED_REFERENCE!>LocalAlias<!><Char> = null!!
}
Derived()
@@ -31,7 +31,7 @@ private fun noParameters() = {
class Derived2 : LocalOuter2<Double, Short>() {
fun foo(): LocalInner2<Long> = null!!
fun bar(): <!UNRESOLVED_REFERENCE!>LocalAlias2<Char><!> = null!!
fun bar(): <!UNRESOLVED_REFERENCE!>LocalAlias2<!><Char> = null!!
}
Derived2()
@@ -16,7 +16,7 @@ class Outer<T> {
class Derived : LocalOuter<Double, Short>() {
fun foo(): LocalInner<Long> = null!!
fun bar(): <!UNRESOLVED_REFERENCE!>LocalAlias<Char><!> = null!!
fun bar(): <!UNRESOLVED_REFERENCE!>LocalAlias<!><Char> = null!!
}
Derived()
@@ -33,7 +33,7 @@ class Outer<T> {
class Derived2 : LocalOuter2<Double, Short>() {
fun foo(): LocalInner2<Long> = null!!
fun bar(): <!UNRESOLVED_REFERENCE!>LocalAlias2<Char><!> = null!!
fun bar(): <!UNRESOLVED_REFERENCE!>LocalAlias2<!><Char> = null!!
}
Derived2()
}
@@ -10,7 +10,7 @@ open class BaseDerived2<X> : BaseDerived1<String, X>()
class Derived : BaseDerived2<Int>() {
fun foo(): Inner<Char> = null!!
fun baz(): <!UNRESOLVED_REFERENCE!>Alias<Char><!> = null!!
fun baz(): <!UNRESOLVED_REFERENCE!>Alias<!><Char> = null!!
}
fun foo() {
@@ -38,7 +38,7 @@ fun ok4(): Outer.Obj.Nested2<A>.Inner5<B> = null!!
fun ok5(): test.Outer.Obj.Nested2<A>.Inner5<B> = null!!
// All arguments are resolved
fun errorTypeWithArguments(): <!UNRESOLVED_REFERENCE!>Q<A>.W<B, C, D>.R.M<!> = null!!
fun errorTypeWithArguments(): <!UNRESOLVED_REFERENCE!>Q<!><A>.W<B, C, D>.R.M = null!!
fun error1(): Outer<A>.Inner<B>.Inner3<!WRONG_NUMBER_OF_TYPE_ARGUMENTS!><C, D><!> = null!!
fun error2(): Outer<A>.Inner<!WRONG_NUMBER_OF_TYPE_ARGUMENTS!><B, C, D><!>.Inner2 = null!!