K2 IC: fix classifiers lookups

in particular nested classifiers and companions.

#KTIJ-24833 fixed
#KTIJ-24830 fixed
#KT-55195 fixed
This commit is contained in:
Ilya Chernikov
2024-02-27 16:28:08 +01:00
committed by Space Team
parent a823bfd600
commit 39b05a0a1c
61 changed files with 560 additions and 341 deletions
@@ -2,6 +2,6 @@ package foo
import bar.*
/*p:foo*/fun <T : /*p:bar p:foo*/A?, B : /*p:bar p:foo*/Iterable</*p:bar p:foo*/Number>, C, D> test()
where C : /*p:bar p:foo*/Number, C : /*p:bar p:foo*/Comparable</*p:bar p:foo*/Number>, D : /*p:bar p:foo*/B
/*p:foo*/fun <T : /*p:bar p:foo*/A?, B : /*p:bar p:foo p:kotlin(Number) p:kotlin.collections*/Iterable</*p:bar p:foo p:kotlin*/Number>, C, D> test()
where C : /*p:bar p:foo p:kotlin*/Number, C : /*p:bar p:foo p:kotlin p:kotlin(Number)*/Comparable</*p:bar p:foo p:kotlin*/Number>, D : /*p:bar p:foo*/B
{}
@@ -6,10 +6,10 @@ import bar.*
val a = 1
var b = ""
val c: /*p:bar p:foo*/String
val c: /*p:bar p:foo p:foo.A*/String
get() = /*p:foo.A*/b
var d: /*p:bar p:foo*/String = "ddd"
var d: /*p:bar p:foo p:foo.A*/String = "ddd"
get() = field
set(v) { field = v }
@@ -27,7 +27,7 @@ import bar.*
val a = 1
companion object CO {
fun bar(a: /*p:bar p:foo*/Int) {}
fun bar(a: /*p:bar p:foo p:foo.A p:foo.A.B*/Int) {}
}
}
@@ -44,7 +44,7 @@ import bar.*
}
/*p:foo*/interface I {
var a: /*p:bar p:foo*/Int
var a: /*p:bar p:foo p:foo.I*/Int
fun foo()
class NI
@@ -64,8 +64,8 @@ import bar.*
val a = 1
fun foo() {
/*p:foo.E*/a
/*p:bar p:foo p:foo.E p:foo.E(a) p:kotlin.Enum p:kotlin.Enum.Companion*/Y.a
/*p:bar p:foo p:foo(E) p:foo.E p:foo.E(a) p:kotlin(Enum) p:kotlin.Enum p:kotlin.Enum(Companion) p:kotlin.Enum.Companion*/Y.a
/*p:foo.E*/foo()
/*p:bar p:foo p:foo.E p:foo.E(foo) p:kotlin.Enum p:kotlin.Enum.Companion*/X.foo()
/*p:bar p:foo p:foo(E) p:foo.E p:foo.E(foo) p:kotlin(Enum) p:kotlin.Enum p:kotlin.Enum(Companion) p:kotlin.Enum.Companion*/X.foo()
}
}
@@ -8,43 +8,43 @@ import bar.*
/*p:foo p:foo.A(c)*/A().c
/*p:foo p:foo.A(d)*/A().d = "new value"
/*p:foo p:foo.A(foo)*/A().foo()
/*p:foo p:foo.A.B(a)*/A.B().a
/*p:bar(bar) p:foo p:foo(bar) p:foo.A.B.CO(bar)*/A.B.bar(1)
/*p:bar(bar) p:foo p:foo(bar) p:foo.A.B.CO(bar)*/A.B.CO.bar(1)
/*p:foo*/A
/*p:foo p:foo.A(a) p:foo.A.Companion(a)*/A.a
/*p:bar(baz) p:foo p:foo(baz) p:foo.A(baz) p:foo.A.Companion(baz)*/A.baz()
/*p:foo*/A.Companion
/*p:bar(baz) p:foo p:foo(baz) p:foo.A(baz) p:foo.A.Companion(baz)*/A.Companion.baz()
/*p:foo*/A.O
/*p:foo p:foo.A.O(v)*/A.O.v = "OK"
/*p:bar p:foo p:foo.A(B) p:foo.A(Companion) p:foo.A.B(a)*/A.B().a
/*p:bar p:bar(bar) p:foo p:foo(bar) p:foo.A(B) p:foo.A(Companion) p:foo.A.B(CO) p:foo.A.B(bar) p:foo.A.B.CO(bar)*/A./*p:foo.A.B(CO)*/B.bar(1)
/*p:bar p:bar(bar) p:foo p:foo(bar) p:foo.A(B) p:foo.A(Companion) p:foo.A.B(CO) p:foo.A.B.CO(bar)*/A./*p:foo.A.B(CO)*/B./*p:foo.A.B*/CO.bar(1)
/*p:foo p:foo.A(Companion)*/A
/*p:bar p:foo p:foo.A(Companion) p:foo.A(a) p:foo.A.Companion(a)*/A.a
/*p:bar p:bar(baz) p:foo p:foo(baz) p:foo.A(Companion) p:foo.A(baz) p:foo.A.Companion(baz)*/A.baz()
/*p:bar p:foo p:foo.A(Companion)*/A./*p:foo.A*/Companion
/*p:bar p:bar(baz) p:foo p:foo(baz) p:foo.A(Companion) p:foo.A(baz) p:foo.A.Companion(baz)*/A./*p:foo.A*/Companion.baz()
/*p:bar p:foo p:foo.A(Companion) p:foo.A(O)*/A./*p:foo.A*/O
/*p:bar p:foo p:foo.A(Companion) p:foo.A(O) p:foo.A.O(v)*/A./*p:foo.A*/O.v = "OK"
/*p:foo.I(a)*/i.a = 2
/*p:foo p:foo.Obj(a)*/Obj.a
/*p:bar(foo) p:foo p:foo(foo) p:foo.Obj(foo)*/Obj.foo()
/*p:foo(I) p:foo.I(a)*/i.a = 2
/*p:bar p:foo p:foo.Obj(a)*/Obj.a
/*p:bar p:bar(foo) p:foo p:foo(foo) p:foo.Obj(foo)*/Obj.foo()
var ii: /*p:bar p:foo*/I = /*p:foo*/Obj
/*p:foo.I(a)*/ii.a
/*p:foo.I(foo)*/ii.foo()
/*p:foo p:foo.Obj(b)*/Obj.b
val iii = /*p:bar(bar) p:foo p:foo(I) p:foo(bar) p:foo.Obj(bar)*/Obj.bar()
/*p:foo.I(foo)*/iii.foo()
/*p:foo(I) p:foo.I(a)*/ii.a
/*p:foo(I) p:foo.I(foo)*/ii.foo()
/*p:bar p:foo p:foo.Obj(b)*/Obj.b
val iii = /*p:bar p:bar(bar) p:foo p:foo(I) p:foo(bar) p:foo.Obj(bar)*/Obj.bar()
/*p:foo(I) p:foo.I(foo)*/iii.foo()
/*p:bar p:foo p:foo.E(X)*/E.X
/*p:bar p:foo p:foo.E(X) p:foo.E(a)*/E.X.a
/*p:bar p:foo p:foo.E(Y) p:foo.E(foo)*/E.Y.foo()
/*p:bar p:foo p:foo.E(X)*/E./*p:foo(E)*/X
/*p:bar p:foo p:foo.E(X) p:foo.E(a)*/E./*p:foo(E)*/X.a
/*p:bar p:foo p:foo.E(Y) p:foo.E(foo)*/E./*p:foo(E)*/Y.foo()
/*p:bar p:foo p:foo.E(values) p:kotlin(Array)*/E.values()
/*p:bar p:foo p:foo.E(valueOf)*/E.valueOf("")
}
/*p:foo*/fun classifiers(
a: /*p:bar p:foo*/A,
ab: /*p:bar p:foo*/A.B,
ac: /*p:bar p:foo*/A.C,
abCo: /*p:bar p:foo*/A.B.CO,
aCompanion: /*p:bar p:foo*/A.Companion,
aO: /*p:bar p:foo*/A.O,
ab: /*p:bar p:bar.A(B) p:foo p:foo.A(B)*/A.B,
ac: /*p:bar p:bar.A(C) p:foo p:foo.A(C)*/A.C,
abCo: /*p:bar p:bar.A(B) p:bar.A.B(CO) p:foo p:foo.A(B) p:foo.A.B(CO)*/A.B.CO,
aCompanion: /*p:bar p:bar.A(Companion) p:foo p:foo.A(Companion)*/A.Companion,
aO: /*p:bar p:bar.A(O) p:foo p:foo.A(O)*/A.O,
i: /*p:bar p:foo*/I,
ni: /*p:bar p:foo*/I.NI,
ni: /*p:bar p:bar.I(NI) p:foo p:foo.I(NI)*/I.NI,
obj: /*p:bar p:foo*/Obj,
e: /*p:bar p:foo*/E
) {}
@@ -8,32 +8,32 @@ import bar.*
/*p:foo p:foo.A(c)*/A().c
/*p:foo p:foo.A(d)*/A().d = "new value"
/*p:foo p:foo.A(foo)*/A().foo()
/*p:foo p:foo.A.B(a)*/A.B().a
/*p:bar(bar) p:foo p:foo(bar) p:foo.A.B.CO(bar)*/A.B.bar(1)
/*p:bar(bar) p:foo p:foo(bar) p:foo.A.B.CO(bar)*/A.B.CO.bar(1)
/*p:foo*/A
/*p:foo p:foo.A(a) p:foo.A.Companion(a)*/A.a
/*p:bar(baz) p:foo p:foo(baz) p:foo.A(baz) p:foo.A.Companion(baz)*/A.baz()
/*p:foo*/A.Companion
/*p:bar(baz) p:foo p:foo(baz) p:foo.A(baz) p:foo.A.Companion(baz)*/A.Companion.baz()
/*p:foo*/A.O
/*p:foo p:foo.A.O(v)*/A.O.v = "OK"
/*p:bar(vala) p:foo p:foo(vala) p:foo.A(vala) p:foo.A.Companion(vala)*/A.vala
/*p:bar(vara) p:foo p:foo(vara) p:foo.A(vara) p:foo.A.Companion(vara)*/A.vara()
/*p:bar p:foo p:foo.A(B) p:foo.A(Companion) p:foo.A.B(a)*/A.B().a
/*p:bar p:bar(bar) p:foo p:foo(bar) p:foo.A(B) p:foo.A(Companion) p:foo.A.B(CO) p:foo.A.B(bar) p:foo.A.B.CO(bar)*/A./*p:foo.A.B(CO)*/B.bar(1)
/*p:bar p:bar(bar) p:foo p:foo(bar) p:foo.A(B) p:foo.A(Companion) p:foo.A.B(CO) p:foo.A.B.CO(bar)*/A./*p:foo.A.B(CO)*/B./*p:foo.A.B*/CO.bar(1)
/*p:foo p:foo.A(Companion)*/A
/*p:bar p:foo p:foo.A(Companion) p:foo.A(a) p:foo.A.Companion(a)*/A.a
/*p:bar p:bar(baz) p:foo p:foo(baz) p:foo.A(Companion) p:foo.A(baz) p:foo.A.Companion(baz)*/A.baz()
/*p:bar p:foo p:foo.A(Companion)*/A./*p:foo.A*/Companion
/*p:bar p:bar(baz) p:foo p:foo(baz) p:foo.A(Companion) p:foo.A(baz) p:foo.A.Companion(baz)*/A./*p:foo.A*/Companion.baz()
/*p:bar p:foo p:foo.A(Companion) p:foo.A(O)*/A./*p:foo.A*/O
/*p:bar p:foo p:foo.A(Companion) p:foo.A(O) p:foo.A.O(v)*/A./*p:foo.A*/O.v = "OK"
/*p:bar p:bar(vala) p:foo p:foo(vala) p:foo.A(Companion) p:foo.A(vala) p:foo.A.Companion(vala)*/A.vala
/*p:bar p:bar(vara) p:foo p:foo(vara) p:foo.A(Companion) p:foo.A(vara) p:foo.A.Companion(vara)*/A.vara()
/*p:foo.I(a)*/i.a = 2
/*p:foo p:foo.Obj(a)*/Obj.a
/*p:bar(foo) p:foo p:foo(foo) p:foo.Obj(foo)*/Obj.foo()
/*p:foo(I) p:foo.I(a)*/i.a = 2
/*p:bar p:foo p:foo.Obj(a)*/Obj.a
/*p:bar p:bar(foo) p:foo p:foo(foo) p:foo.Obj(foo)*/Obj.foo()
var ii: /*p:bar p:foo*/I = /*p:foo*/Obj
/*p:foo.I(a)*/ii.a
/*p:foo.I(foo)*/ii.foo()
/*p:foo p:foo.Obj(b)*/Obj.b
val iii = /*p:bar(bar) p:foo p:foo(I) p:foo(bar) p:foo.Obj(bar)*/Obj.bar()
/*p:foo.I(foo)*/iii.foo()
/*p:foo(I) p:foo.I(a)*/ii.a
/*p:foo(I) p:foo.I(foo)*/ii.foo()
/*p:bar p:foo p:foo.Obj(b)*/Obj.b
val iii = /*p:bar p:bar(bar) p:foo p:foo(I) p:foo(bar) p:foo.Obj(bar)*/Obj.bar()
/*p:foo(I) p:foo.I(foo)*/iii.foo()
/*p:bar p:foo p:foo.E(X)*/E.X
/*p:bar p:foo p:foo.E(X) p:foo.E(a)*/E.X.a
/*p:bar p:foo p:foo.E(Y) p:foo.E(foo)*/E.Y.foo()
/*p:bar p:foo p:foo.E(X)*/E./*p:foo(E)*/X
/*p:bar p:foo p:foo.E(X) p:foo.E(a)*/E./*p:foo(E)*/X.a
/*p:bar p:foo p:foo.E(Y) p:foo.E(foo)*/E./*p:foo(E)*/Y.foo()
/*p:bar p:foo p:foo.E(values) p:kotlin(Array)*/E.values()
/*p:bar p:foo p:foo.E(valueOf)*/E.valueOf("")
/*p:bar p:bar(foo) p:foo p:foo(foo) p:foo.E(foo)*/E.foo
@@ -42,13 +42,13 @@ import bar.*
/*p:foo*/fun classifiers(
a: /*p:bar p:foo*/A,
ab: /*p:bar p:foo*/A.B,
ac: /*p:bar p:foo*/A.C,
abCo: /*p:bar p:foo*/A.B.CO,
aCompanion: /*p:bar p:foo*/A.Companion,
aO: /*p:bar p:foo*/A.O,
ab: /*p:bar p:bar.A(B) p:foo p:foo.A(B)*/A.B,
ac: /*p:bar p:bar.A(C) p:foo p:foo.A(C)*/A.C,
abCo: /*p:bar p:bar.A(B) p:bar.A.B(CO) p:foo p:foo.A(B) p:foo.A.B(CO)*/A.B.CO,
aCompanion: /*p:bar p:bar.A(Companion) p:foo p:foo.A(Companion)*/A.Companion,
aO: /*p:bar p:bar.A(O) p:foo p:foo.A(O)*/A.O,
i: /*p:bar p:foo*/I,
ni: /*p:bar p:foo*/I.NI,
ni: /*p:bar p:bar.I(NI) p:foo p:foo.I(NI)*/I.NI,
obj: /*p:bar p:foo*/Obj,
e: /*p:bar p:foo*/E
) {}