[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,82 +0,0 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
// SKIP_TXT
// Issues: KT-25105
class Message1
class Task<T>
object Message2
enum class Message3
data class Message4(val x: Int)
interface Manager<T> {}
object MessageManager1 : Manager<Message1> {
fun <T : <!FINAL_UPPER_BOUND!>Message1<!>> execute1(task: Task<T>) {}
fun <T : <!FINAL_UPPER_BOUND!>Int<!>> execute2(task: T) {}
fun <T : <!FINAL_UPPER_BOUND!>Message2<!>> execute3() {}
}
object MessageManager2 : Manager<Message3> {
fun <T : Message3> execute4() {}
}
object MessageManager3 : Manager<Message4> {
fun <T : <!FINAL_UPPER_BOUND!>Message4<!>> execute5() {}
}
class MessageManager4 : Manager<Message1> {
fun <T : <!FINAL_UPPER_BOUND!>Message1<!>> execute1(task: Task<T>) {}
fun <T : <!FINAL_UPPER_BOUND!>Int<!>> execute2(task: T) {}
fun <T : <!FINAL_UPPER_BOUND!>Message2<!>> execute3() {}
}
class MessageManager5 : Manager<Message3> {
fun <T : Message3> execute4() {}
}
class MessageManager6 : Manager<Message4> {
fun <T : <!FINAL_UPPER_BOUND!>Message4<!>> execute5() {}
}
interface MessageManager7 : Manager<Message4> {
fun <T : <!FINAL_UPPER_BOUND!>Message4<!>> execute5() {}
}
interface MessageManager8 : Manager<Message1> {
fun <T : <!FINAL_UPPER_BOUND!>Message1<!>> execute1(task: Task<T>) {}
fun <T : <!FINAL_UPPER_BOUND!>Int<!>> execute2(task: T) {}
fun <T : <!FINAL_UPPER_BOUND!>Message2<!>> execute3() {}
}
interface MessageManager9 : Manager<Message3> {
fun <T : Message3> execute4() {}
}
object MessageManager10 : <!UNRESOLVED_REFERENCE!>Message5<Int><!>() {
fun <T : <!FINAL_UPPER_BOUND!>Int<!>> execute() {}
}
class MessageManager11<A> : <!UNRESOLVED_REFERENCE!>Message5<<!UNRESOLVED_REFERENCE!>Message5<A><!>><!>() {
fun <T : <!UNRESOLVED_REFERENCE!>Message5<A><!>> execute() {}
}
data class MessageManager12(val x: Int) : <!UNRESOLVED_REFERENCE!>Message5<Message2><!>() {
fun <T : <!FINAL_UPPER_BOUND!>Message2<!>> execute() {}
}
sealed class MessageManager13<A> : <!UNRESOLVED_REFERENCE!>Message5<A><!>() {
fun <T : A> execute() {}
}
class MessageManager14 : Manager<Message2> {
val <T : <!FINAL_UPPER_BOUND!>Message2<!>> T.x get() = 10
var <T : <!FINAL_UPPER_BOUND!>Message2<!>> T.y
get() = 10
set(value) {}
}
object MessageManager15 : Manager<Int> {
val <T : <!FINAL_UPPER_BOUND!>Int<!>> T.x get() = 10
var <T : <!FINAL_UPPER_BOUND!>Int<!>> T.y
get() = 10
set(value) {}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -UNUSED_PARAMETER
// SKIP_TXT
// Issues: KT-25105
@@ -29,7 +29,7 @@ fun test() {
a<Foo.Bar<!WRONG_NUMBER_OF_TYPE_ARGUMENTS!><Int><!>.Baz>()
}
fun <T: Foo<<!UNRESOLVED_REFERENCE!>String.Bar<!>>> x() {}
fun <T: Foo<String.<!UNRESOLVED_REFERENCE!>Bar<!>>> x() {}
fun Foo<String>.<!WRONG_NUMBER_OF_TYPE_ARGUMENTS!>Bar<!>.ext() {}
fun ex1(a: Foo<!WRONG_NUMBER_OF_TYPE_ARGUMENTS!><String><!>.Bar<String>): Foo<!WRONG_NUMBER_OF_TYPE_ARGUMENTS!><String><!>.Bar<String> {
@@ -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!!
@@ -1,14 +0,0 @@
interface I0<T : <!UNRESOLVED_REFERENCE!>Unresolved0<String><!>>
interface I1<T> where T : <!UNRESOLVED_REFERENCE!>Unresolved1<String><!>
interface I2<<!MISPLACED_TYPE_PARAMETER_CONSTRAINTS!>T : <!UNRESOLVED_REFERENCE!>Unresolved2<String><!><!>> where T : <!UNRESOLVED_REFERENCE!>Unresolved3<String><!>
fun <E : <!UNRESOLVED_REFERENCE!>Unresolved4<String><!>> foo0() {}
fun <E> foo1() where E : <!UNRESOLVED_REFERENCE!>Unresolved5<String><!> {}
fun <<!MISPLACED_TYPE_PARAMETER_CONSTRAINTS!>E : <!UNRESOLVED_REFERENCE!>Unresolved6<String><!><!>> foo2() where E : <!UNRESOLVED_REFERENCE!>Unresolved7<String><!> {}
val <E : <!UNRESOLVED_REFERENCE!>Unresolved7<!>> E.p1: Int
get() = 1
val <E> E.p2: Int where E : <!UNRESOLVED_REFERENCE!>Unresolved8<!>
get() = 1
val <<!MISPLACED_TYPE_PARAMETER_CONSTRAINTS!>E : <!UNRESOLVED_REFERENCE!>Unresolved9<!><!>> E.p3: Int where E : <!UNRESOLVED_REFERENCE!>Unresolved10<!>
get() = 1
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
interface I0<T : <!UNRESOLVED_REFERENCE!>Unresolved0<!><String>>
interface I1<T> where T : <!UNRESOLVED_REFERENCE!>Unresolved1<!><String>
interface I2<<!MISPLACED_TYPE_PARAMETER_CONSTRAINTS!>T : <!UNRESOLVED_REFERENCE!>Unresolved2<!><String><!>> where T : <!UNRESOLVED_REFERENCE!>Unresolved3<!><String>