K2 IC: refactor and optimize lookup tracking

- encapsulate semantic more into helpers
- allow lazy scopes iteration
- simplify reporting code in tower resolver
- fix some inconsistencies and wrong lookups
- remove redundant lookup recordings
- remove lookup scopes for non-star imports

The commit is a refactoring and doesn't change the behaviour of
neither IC nor CRI. Changes in the lookups are mostly due to the
previous obviously wrong lookups (see changed test data).
This commit is contained in:
Ilya Chernikov
2024-02-27 16:44:39 +01:00
committed by Space Team
parent fe4e0e9c2e
commit a823bfd600
29 changed files with 176 additions and 179 deletions
@@ -8,7 +8,7 @@ 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(B) p:foo.A.B(a)*/A.B().a
/*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
@@ -8,7 +8,7 @@ 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(B) p:foo.A.B(a)*/A.B().a
/*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
@@ -3,28 +3,28 @@ package foo.bar
/*p:kotlin.reflect(KProperty)*/import kotlin.reflect.KProperty
/*p:foo.bar*/class D1 {
operator fun getValue(t: /*p:foo.bar p:kotlin.reflect*/Any?, p: /*p:foo.bar p:kotlin.reflect*/KProperty<*>) = 1
operator fun getValue(t: /*p:foo.bar*/Any?, p: /*p:foo.bar*/KProperty<*>) = 1
}
/*p:foo.bar*/operator fun /*p:foo.bar p:kotlin.reflect*/D1.setValue(t: /*p:foo.bar p:kotlin.reflect*/Any?, p: /*p:foo.bar p:kotlin.reflect*/KProperty<*>, v: /*p:foo.bar p:kotlin.reflect*/Int) {}
/*p:foo.bar*/operator fun /*p:foo.bar*/D1.setValue(t: /*p:foo.bar*/Any?, p: /*p:foo.bar*/KProperty<*>, v: /*p:foo.bar*/Int) {}
/*p:foo.bar(D2)*/open class D2 {
operator fun setValue(t: /*p:foo.bar p:kotlin.reflect*/Any?, p: /*p:foo.bar p:kotlin.reflect*/KProperty<*>, v: /*p:foo.bar p:kotlin.reflect*/Int) {}
operator fun setValue(t: /*p:foo.bar*/Any?, p: /*p:foo.bar*/KProperty<*>, v: /*p:foo.bar*/Int) {}
}
/*p:foo.bar*/operator fun /*p:foo.bar p:kotlin.reflect*/D2.getValue(t: /*p:foo.bar p:kotlin.reflect*/Any?, p: /*p:foo.bar p:kotlin.reflect*/KProperty<*>) = 1
/*p:foo.bar*/operator fun /*p:foo.bar p:kotlin.reflect*/D2.provideDelegate(p: /*p:foo.bar p:kotlin.reflect*/Any?, k: /*p:foo.bar p:kotlin.reflect*/Any) = this
/*p:foo.bar*/operator fun /*p:foo.bar*/D2.getValue(t: /*p:foo.bar*/Any?, p: /*p:foo.bar*/KProperty<*>) = 1
/*p:foo.bar*/operator fun /*p:foo.bar*/D2.provideDelegate(p: /*p:foo.bar*/Any?, k: /*p:foo.bar*/Any) = this
/*p:foo.bar*/class D3 : /*p:foo.bar p:kotlin.reflect*/D2() {
operator fun provideDelegate(p: /*p:foo.bar p:kotlin.reflect*/Any?, k: /*p:foo.bar p:kotlin.reflect*/Any) = this
/*p:foo.bar*/class D3 : /*p:foo.bar*/D2() {
operator fun provideDelegate(p: /*p:foo.bar*/Any?, k: /*p:foo.bar*/Any) = this
}
/*p:foo.bar*/val x1 by /*p:foo.bar p:foo.bar(D2) p:foo.bar(provideDelegate) p:foo.bar.D1(getValue) p:foo.bar.D1(provideDelegate) p:kotlin.reflect p:kotlin.reflect(KProperty0) p:kotlin.reflect(provideDelegate)*/D1()
/*p:foo.bar*/var y1 by /*p:foo.bar p:foo.bar(D2) p:foo.bar(provideDelegate) p:foo.bar(setValue) p:foo.bar.D1(getValue) p:foo.bar.D1(provideDelegate) p:foo.bar.D1(setValue) p:kotlin.reflect p:kotlin.reflect(KMutableProperty0) p:kotlin.reflect(provideDelegate) p:kotlin.reflect(setValue)*/D1()
/*p:foo.bar*/val x1 by /*p:foo.bar p:foo.bar(D2) p:foo.bar(provideDelegate) p:foo.bar.D1(getValue) p:foo.bar.D1(provideDelegate) p:kotlin.reflect(KProperty0)*/D1()
/*p:foo.bar*/var y1 by /*p:foo.bar p:foo.bar(D2) p:foo.bar(provideDelegate) p:foo.bar(setValue) p:foo.bar.D1(getValue) p:foo.bar.D1(provideDelegate) p:foo.bar.D1(setValue) p:kotlin.reflect(KMutableProperty0)*/D1()
/*p:foo.bar*/val x2 by /*p:foo.bar p:foo.bar(getValue) p:foo.bar(provideDelegate) p:foo.bar.D2(getValue) p:foo.bar.D2(provideDelegate) p:kotlin.reflect p:kotlin.reflect(KProperty0) p:kotlin.reflect(getValue) p:kotlin.reflect(provideDelegate)*/D2()
/*p:foo.bar*/var y2 by /*p:foo.bar p:foo.bar(getValue) p:foo.bar(provideDelegate) p:foo.bar.D2(getValue) p:foo.bar.D2(provideDelegate) p:foo.bar.D2(setValue) p:kotlin.reflect p:kotlin.reflect(KMutableProperty0) p:kotlin.reflect(getValue) p:kotlin.reflect(provideDelegate)*/D2()
/*p:foo.bar*/val x2 by /*p:foo.bar p:foo.bar(getValue) p:foo.bar(provideDelegate) p:foo.bar.D2(getValue) p:foo.bar.D2(provideDelegate) p:kotlin.reflect(KProperty0)*/D2()
/*p:foo.bar*/var y2 by /*p:foo.bar p:foo.bar(getValue) p:foo.bar(provideDelegate) p:foo.bar.D2(getValue) p:foo.bar.D2(provideDelegate) p:foo.bar.D2(setValue) p:kotlin.reflect(KMutableProperty0)*/D2()
/*p:foo.bar*/val x3 by /*p:foo.bar p:foo.bar(getValue) p:foo.bar.D3(getValue) p:foo.bar.D3(provideDelegate) p:kotlin.reflect p:kotlin.reflect(KProperty0) p:kotlin.reflect(getValue)*/D3()
/*p:foo.bar*/var y3 by /*p:foo.bar p:foo.bar(getValue) p:foo.bar.D2(setValue) p:foo.bar.D3(getValue) p:foo.bar.D3(provideDelegate) p:foo.bar.D3(setValue) p:kotlin.reflect p:kotlin.reflect(KMutableProperty0) p:kotlin.reflect(getValue)*/D3()
/*p:foo.bar*/val x3 by /*p:foo.bar p:foo.bar(getValue) p:foo.bar.D3(getValue) p:foo.bar.D3(provideDelegate) p:kotlin.reflect(KProperty0)*/D3()
/*p:foo.bar*/var y3 by /*p:foo.bar p:foo.bar(getValue) p:foo.bar.D2(setValue) p:foo.bar.D3(getValue) p:foo.bar.D3(provideDelegate) p:foo.bar.D3(setValue) p:kotlin.reflect(KMutableProperty0)*/D3()
@@ -12,5 +12,5 @@ package foo.bar
val (/*p:foo.bar(A) p:foo.bar.A(component1)*/h, /*p:foo.bar(A) p:foo.bar(component2) p:foo.bar.A(component2)*/t) = a;
for ((/*p:foo.bar(A) p:foo.bar.A(component1)*/f, /*p:foo.bar(A) p:foo.bar(component2) p:foo.bar.A(component2)*/s) in /*p:foo.bar(A) p:foo.bar(hasNext) p:foo.bar.A(hasNext) p:foo.bar.A(iterator) p:foo.bar.A(next)*/a);
for ((/*p:foo.bar(A) p:foo.bar.A(component1)*/f, /*p:foo.bar(A) p:foo.bar(component2) p:foo.bar.A(component2)*/s) in /*p:foo.bar(A) p:foo.bar(hasNext) p:foo.bar(iterator) p:foo.bar.A(hasNext) p:foo.bar.A(iterator) p:foo.bar.A(next) p:foo.bar.A?(iterator)*/na);
for ((/*p:foo.bar(A) p:foo.bar.A(component1)*/f, /*p:foo.bar(A) p:foo.bar(component2) p:foo.bar.A(component2)*/s) in /*p:foo.bar(A) p:foo.bar(hasNext) p:foo.bar(iterator) p:foo.bar.A(hasNext) p:foo.bar.A(iterator) p:foo.bar.A(next)*/na);
}
@@ -5,11 +5,11 @@ package foo
/*p:foo*/fun <T> identity(): (/*p:foo*/T) -> /*p:foo*/T = null as (/*p:foo*/T) -> /*p:foo*/T
/*p:foo*/fun <T> compute(f: () -> /*p:foo*/T) {
val result = /*p:kotlin(Function0) p:kotlin.Function0(invoke) p:kotlin.Function0<T>(invoke)*/f()
val result = /*p:kotlin(Function0) p:kotlin.Function0(invoke)*/f()
}
/*p:foo*/class Bar<T>(val t: /*p:foo*/T) {
init {
val a = /*p:foo.Bar p:foo.Bar<T>*/t
val a = /*p:foo.Bar*/t
}
}
@@ -31,7 +31,7 @@ import bar.*
}
localFun()
/*p:IOT(localExtFun)*/1.localExtFun()
1.localExtFun()
val c = LocalC()
c.a
@@ -3,15 +3,15 @@ package foo
import bar.*
/*p:baz(C)*/import baz.C
/*p:foo*/val a = /*p:bar p:baz p:foo*/A()
/*p:foo*/var b: /*p:bar p:baz p:foo*/baz.B = /*p:bar p:baz p:baz(B) p:foo*/baz.B()
/*p:foo*/val a = /*p:bar p:foo*/A()
/*p:foo*/var b: /*p:bar p:foo*/baz.B = /*p:bar p:baz(B) p:foo*/baz.B()
/*p:foo*/fun function(p: /*p:bar p:baz p:foo*/B): /*p:bar p:baz p:foo*/B {
/*p:baz p:foo*/a
return /*p:bar p:baz p:foo*/B()
/*p:foo*/fun function(p: /*p:bar p:foo*/B): /*p:bar p:foo*/B {
/*p:foo*/a
return /*p:bar p:foo*/B()
}
/*p:foo*/fun /*p:bar p:baz p:foo*/MyClass.extFunc(p: /**p:foo p:bar*//*p:bar p:baz p:foo*/Array</*p:bar p:baz p:foo*/B>, e: /*p:bar p:baz p:foo*/MyEnum, c: /**???*//*p:bar p:baz p:foo*/C): /*p:bar p:baz p:foo*/MyInterface {
/*p:bar p:baz p:foo p:foo.MyClass*/b
return /*p:bar p:baz p:foo p:foo.MyClass*/MyClass()
/*p:foo*/fun /*p:bar p:foo*/MyClass.extFunc(p: /**p:foo p:bar*//*p:bar p:foo*/Array</*p:bar p:foo*/B>, e: /*p:bar p:foo*/MyEnum, c: /**???*//*p:bar p:foo*/C): /*p:bar p:foo*/MyInterface {
/*p:bar p:foo p:foo.MyClass*/b
return /*p:bar p:foo p:foo.MyClass*/MyClass()
}
@@ -2,12 +2,12 @@ package foo
/*p:bar(C)*/import bar.C
/*p:bar(SAMInterface)*/import bar.SAMInterface
/*p:foo*/fun foo(c: /*p:bar p:foo*/C) {
/*p:bar(foo) p:bar.C(foo) p:foo(foo)*/c.foo()
/*p:bar(SAMInterface) p:bar.C(foo) p:bar/SAMInterface(<SAM-CONSTRUCTOR>)*/c.foo /*p:kotlin(Function1)*/{ }
/*p:foo*/fun foo(c: /*p:foo*/C) {
/*p:bar.C(foo) p:foo(foo)*/c.foo()
/*p:bar(SAMInterface) p:bar.C(foo) p:bar.SAMInterface(<SAM-CONSTRUCTOR>)*/c.foo /*p:kotlin(Function1)*/{ }
/*p:bar p:bar(bar) p:bar.C(bar) p:foo p:foo(bar)*/C.bar()
/*p:bar p:bar(SAMInterface) p:bar.C(bar) p:bar/SAMInterface(<SAM-CONSTRUCTOR>) p:foo*/C.bar /*p:kotlin(Function1)*/{}
/*p:bar.C(bar) p:foo p:foo(bar)*/C.bar()
/*p:bar(SAMInterface) p:bar.C(bar) p:bar.SAMInterface(<SAM-CONSTRUCTOR>) p:foo*/C.bar /*p:kotlin(Function1)*/{}
/*p:bar p:foo*/SAMInterface()
/*p:bar*/SAMInterface /*p:kotlin(Function1)*/{}
@@ -8,7 +8,7 @@ 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(B) p:foo.A.B(a)*/A.B().a
/*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
@@ -8,7 +8,7 @@ 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(B) p:foo.A.B(a)*/A.B().a
/*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
@@ -3,28 +3,28 @@ package foo.bar
/*p:kotlin.reflect(KProperty)*/import kotlin.reflect.KProperty
/*p:foo.bar*/class D1 {
operator fun getValue(t: /*p:foo.bar p:kotlin.reflect*/Any?, p: /*p:foo.bar p:kotlin.reflect*/KProperty<*>) = 1
operator fun getValue(t: /*p:foo.bar*/Any?, p: /*p:foo.bar*/KProperty<*>) = 1
}
/*p:foo.bar*/operator fun /*p:foo.bar p:kotlin.reflect*/D1.setValue(t: /*p:foo.bar p:kotlin.reflect*/Any?, p: /*p:foo.bar p:kotlin.reflect*/KProperty<*>, v: /*p:foo.bar p:kotlin.reflect*/Int) {}
/*p:foo.bar*/operator fun /*p:foo.bar*/D1.setValue(t: /*p:foo.bar*/Any?, p: /*p:foo.bar*/KProperty<*>, v: /*p:foo.bar*/Int) {}
/*p:foo.bar(D2)*/open class D2 {
operator fun setValue(t: /*p:foo.bar p:kotlin.reflect*/Any?, p: /*p:foo.bar p:kotlin.reflect*/KProperty<*>, v: /*p:foo.bar p:kotlin.reflect*/Int) {}
operator fun setValue(t: /*p:foo.bar*/Any?, p: /*p:foo.bar*/KProperty<*>, v: /*p:foo.bar*/Int) {}
}
/*p:foo.bar*/operator fun /*p:foo.bar p:kotlin.reflect*/D2.getValue(t: /*p:foo.bar p:kotlin.reflect*/Any?, p: /*p:foo.bar p:kotlin.reflect*/KProperty<*>) = 1
/*p:foo.bar*/operator fun /*p:foo.bar p:kotlin.reflect*/D2.provideDelegate(p: /*p:foo.bar p:kotlin.reflect*/Any?, k: /*p:foo.bar p:kotlin.reflect*/Any) = this
/*p:foo.bar*/operator fun /*p:foo.bar*/D2.getValue(t: /*p:foo.bar*/Any?, p: /*p:foo.bar*/KProperty<*>) = 1
/*p:foo.bar*/operator fun /*p:foo.bar*/D2.provideDelegate(p: /*p:foo.bar*/Any?, k: /*p:foo.bar*/Any) = this
/*p:foo.bar*/class D3 : /*p:foo.bar p:kotlin.reflect*/D2() {
operator fun provideDelegate(p: /*p:foo.bar p:kotlin.reflect*/Any?, k: /*p:foo.bar p:kotlin.reflect*/Any) = this
/*p:foo.bar*/class D3 : /*p:foo.bar*/D2() {
operator fun provideDelegate(p: /*p:foo.bar*/Any?, k: /*p:foo.bar*/Any) = this
}
/*p:foo.bar*/val x1 by /*p:foo.bar p:foo.bar(D2) p:foo.bar(provideDelegate) p:foo.bar.D1(getValue) p:foo.bar.D1(provideDelegate) p:kotlin.reflect p:kotlin.reflect(KProperty0) p:kotlin.reflect(provideDelegate)*/D1()
/*p:foo.bar*/var y1 by /*p:foo.bar p:foo.bar(D2) p:foo.bar(provideDelegate) p:foo.bar(setValue) p:foo.bar.D1(getValue) p:foo.bar.D1(provideDelegate) p:foo.bar.D1(setValue) p:kotlin.reflect p:kotlin.reflect(KMutableProperty0) p:kotlin.reflect(provideDelegate) p:kotlin.reflect(setValue)*/D1()
/*p:foo.bar*/val x1 by /*p:foo.bar p:foo.bar(D2) p:foo.bar(provideDelegate) p:foo.bar.D1(getValue) p:foo.bar.D1(provideDelegate) p:kotlin.reflect(KProperty0)*/D1()
/*p:foo.bar*/var y1 by /*p:foo.bar p:foo.bar(D2) p:foo.bar(provideDelegate) p:foo.bar(setValue) p:foo.bar.D1(getValue) p:foo.bar.D1(provideDelegate) p:foo.bar.D1(setValue) p:kotlin.reflect(KMutableProperty0)*/D1()
/*p:foo.bar*/val x2 by /*p:foo.bar p:foo.bar(getValue) p:foo.bar(provideDelegate) p:foo.bar.D2(getValue) p:foo.bar.D2(provideDelegate) p:kotlin.reflect p:kotlin.reflect(KProperty0) p:kotlin.reflect(getValue) p:kotlin.reflect(provideDelegate)*/D2()
/*p:foo.bar*/var y2 by /*p:foo.bar p:foo.bar(getValue) p:foo.bar(provideDelegate) p:foo.bar.D2(getValue) p:foo.bar.D2(provideDelegate) p:foo.bar.D2(setValue) p:kotlin.reflect p:kotlin.reflect(KMutableProperty0) p:kotlin.reflect(getValue) p:kotlin.reflect(provideDelegate)*/D2()
/*p:foo.bar*/val x2 by /*p:foo.bar p:foo.bar(getValue) p:foo.bar(provideDelegate) p:foo.bar.D2(getValue) p:foo.bar.D2(provideDelegate) p:kotlin.reflect(KProperty0)*/D2()
/*p:foo.bar*/var y2 by /*p:foo.bar p:foo.bar(getValue) p:foo.bar(provideDelegate) p:foo.bar.D2(getValue) p:foo.bar.D2(provideDelegate) p:foo.bar.D2(setValue) p:kotlin.reflect(KMutableProperty0)*/D2()
/*p:foo.bar*/val x3 by /*p:foo.bar p:foo.bar(getValue) p:foo.bar.D3(getValue) p:foo.bar.D3(provideDelegate) p:kotlin.reflect p:kotlin.reflect(KProperty0) p:kotlin.reflect(getValue)*/D3()
/*p:foo.bar*/var y3 by /*p:foo.bar p:foo.bar(getValue) p:foo.bar.D2(setValue) p:foo.bar.D3(getValue) p:foo.bar.D3(provideDelegate) p:foo.bar.D3(setValue) p:kotlin.reflect p:kotlin.reflect(KMutableProperty0) p:kotlin.reflect(getValue)*/D3()
/*p:foo.bar*/val x3 by /*p:foo.bar p:foo.bar(getValue) p:foo.bar.D3(getValue) p:foo.bar.D3(provideDelegate) p:kotlin.reflect(KProperty0)*/D3()
/*p:foo.bar*/var y3 by /*p:foo.bar p:foo.bar(getValue) p:foo.bar.D2(setValue) p:foo.bar.D3(getValue) p:foo.bar.D3(provideDelegate) p:foo.bar.D3(setValue) p:kotlin.reflect(KMutableProperty0)*/D3()
@@ -12,5 +12,5 @@ package foo.bar
val (/*p:foo.bar(A) p:foo.bar.A(component1)*/h, /*p:foo.bar(A) p:foo.bar(component2) p:foo.bar.A(component2)*/t) = a;
for ((/*p:foo.bar(A) p:foo.bar.A(component1)*/f, /*p:foo.bar(A) p:foo.bar(component2) p:foo.bar.A(component2)*/s) in /*p:foo.bar(A) p:foo.bar(hasNext) p:foo.bar.A(hasNext) p:foo.bar.A(iterator) p:foo.bar.A(next)*/a);
for ((/*p:foo.bar(A) p:foo.bar.A(component1)*/f, /*p:foo.bar(A) p:foo.bar(component2) p:foo.bar.A(component2)*/s) in /*p:foo.bar(A) p:foo.bar(hasNext) p:foo.bar(iterator) p:foo.bar.A(hasNext) p:foo.bar.A(iterator) p:foo.bar.A(next) p:foo.bar.A?(iterator)*/na);
for ((/*p:foo.bar(A) p:foo.bar.A(component1)*/f, /*p:foo.bar(A) p:foo.bar(component2) p:foo.bar.A(component2)*/s) in /*p:foo.bar(A) p:foo.bar(hasNext) p:foo.bar(iterator) p:foo.bar.A(hasNext) p:foo.bar.A(iterator) p:foo.bar.A(next)*/na);
}
@@ -5,11 +5,11 @@ package foo
/*p:foo*/fun <T> identity(): (/*p:foo*/T) -> /*p:foo*/T = null as (/*p:foo*/T) -> /*p:foo*/T
/*p:foo*/fun <T> compute(f: () -> /*p:foo*/T) {
val result = /*p:kotlin(Function0) p:kotlin.Function0(invoke) p:kotlin.Function0<T>(invoke)*/f()
val result = /*p:kotlin(Function0) p:kotlin.Function0(invoke)*/f()
}
/*p:foo*/class Bar<T>(val t: /*p:foo*/T) {
init {
val a = /*p:foo.Bar p:foo.Bar<T>*/t
val a = /*p:foo.Bar*/t
}
}
@@ -9,37 +9,37 @@ import baz.*
/*p:bar.C(field)*/c.field
/*p:bar.C(field)*/c.field = 2
/*p:bar.C(func)*/c.func()
/*p:bar(B) p:bar.C(B) p:bar.C.B(B)*/c.B()
/*p:bar(C.B) p:bar.C(B)*/c.B()
/*p:bar p:bar.C(sfield) p:baz p:foo*/C.sfield
/*p:bar p:bar.C(sfield) p:baz p:foo*/C.sfield = "new"
/*p:bar p:bar.C(sfunc) p:baz p:foo*/C.sfunc()
/*p:bar p:bar(S) p:bar.C(S) p:baz p:foo*/C.S()
/*p:bar.C(sfield) p:baz p:foo*/C.sfield
/*p:bar.C(sfield) p:baz p:foo*/C.sfield = "new"
/*p:bar.C(sfunc) p:baz p:foo*/C.sfunc()
/*p:bar p:bar.C(S) p:baz p:foo*/C.S()
// inherited from I
/*p:bar.C(ifunc)*/c.ifunc()
/*p:bar p:bar.C(isfield) p:baz p:foo*/C.isfield
/*p:bar.C(isfield) p:baz p:foo*/C.isfield
// expected error: Unresolved reference: IS
/*p:bar p:bar(IS) p:bar.C(IS) p:baz p:baz(IS) p:foo p:foo(IS)*/C.IS()
/*p:bar.C(IS) p:baz p:baz(IS) p:foo p:foo(IS)*/C.IS()
val i: /*p:bar p:baz p:foo*/I = c
val i: /*p:baz p:foo*/I = c
/*p:foo.I(ifunc)*/i.ifunc()
/*p:bar p:baz p:foo p:foo.I(isfield)*/I.isfield
/*p:bar p:baz p:foo p:foo(IS) p:foo.I(IS)*/I.IS()
/*p:baz p:foo p:foo.I(isfield)*/I.isfield
/*p:baz p:foo p:foo.I(IS)*/I.IS()
/*p:bar p:baz p:baz.E(F) p:foo*/E.F
/*p:bar p:baz p:baz.E(F) p:baz.E(field) p:foo*/E.F.field
/*p:bar p:baz p:baz.E(S) p:baz.E(func) p:foo*/E.S.func()
/*p:baz p:baz.E(F) p:foo*/E.F
/*p:baz p:baz.E(F) p:baz.E(field) p:foo*/E.F.field
/*p:baz p:baz.E(S) p:baz.E(func) p:foo*/E.S.func()
}
fun classifiers(
c: /*p:bar p:baz p:foo*/C,
b: /*p:bar p:baz p:foo*/C.B,
s: /*p:bar p:baz p:foo*/C.S,
cis: /*p:bar p:baz p:foo*/C.IS,
i: /*p:bar p:baz p:foo*/I,
iis: /*p:bar p:baz p:foo*/I.IS,
e: /*p:bar p:baz p:foo*/E
c: /*p:baz p:foo*/C,
b: /*p:baz p:foo*/C.B,
s: /*p:baz p:foo*/C.S,
cis: /*p:baz p:foo*/C.IS,
i: /*p:baz p:foo*/I,
iis: /*p:baz p:foo*/I.IS,
e: /*p:baz p:foo*/E
) {}
@@ -31,7 +31,7 @@ import bar.*
}
localFun()
/*p:IOT(localExtFun)*/1.localExtFun()
1.localExtFun()
val c = LocalC()
c.a
@@ -3,15 +3,15 @@ package foo
import bar.*
/*p:baz(C)*/import baz.C
/*p:foo*/val a = /*p:bar p:baz p:foo*/A()
/*p:foo*/var b: /*p:bar p:baz p:foo*/baz.B = /*p:bar p:baz p:baz(B) p:foo*/baz.B()
/*p:foo*/val a = /*p:bar p:foo*/A()
/*p:foo*/var b: /*p:bar p:foo*/baz.B = /*p:bar p:baz(B) p:foo*/baz.B()
/*p:foo*/fun function(p: /*p:bar p:baz p:foo*/B): /*p:bar p:baz p:foo*/B {
/*p:baz p:foo*/a
return /*p:bar p:baz p:foo*/B()
/*p:foo*/fun function(p: /*p:bar p:foo*/B): /*p:bar p:foo*/B {
/*p:foo*/a
return /*p:bar p:foo*/B()
}
/*p:foo*/fun /*p:bar p:baz p:foo*/MyClass.extFunc(p: /**p:foo p:bar*//*p:bar p:baz p:foo*/Array</*p:bar p:baz p:foo*/B>, e: /*p:bar p:baz p:foo*/MyEnum, c: /**???*//*p:bar p:baz p:foo*/C): /*p:bar p:baz p:foo*/MyInterface {
/*p:bar p:baz p:foo p:foo.MyClass*/b
return /*p:bar p:baz p:foo p:foo.MyClass*/MyClass()
/*p:foo*/fun /*p:bar p:foo*/MyClass.extFunc(p: /**p:foo p:bar*//*p:bar p:foo*/Array</*p:bar p:foo*/B>, e: /*p:bar p:foo*/MyEnum, c: /*p:bar p:foo*/C): /*p:bar p:foo*/MyInterface {
/*p:bar p:foo p:foo.MyClass*/b
return /*p:bar p:foo p:foo.MyClass*/MyClass()
}
@@ -2,7 +2,7 @@ package foo
/*p:<root>(JavaClass)*/import JavaClass
/*p:foo*/class KotlinClass : /*p:<root> p:foo*/JavaClass() {
/*p:foo*/class KotlinClass : /*p:foo*/JavaClass() {
override fun getFoo() = 2
fun setFoo(i: /*p:<root> p:foo*/Int) {}
fun setFoo(i: /*p:foo*/Int) {}
}
@@ -4,11 +4,11 @@ package foo.bar
/*p:foo(KotlinClass)*/import foo.KotlinClass
/*p:foo.bar*/fun test() {
val j = /*p:<root> p:foo*/JavaClass()
val k = /*p:<root> p:foo*/KotlinClass()
val j = /*p:<root>*/JavaClass()
val k = /*p:foo*/KotlinClass()
/*p:JavaClass(getFoo)*/j.getFoo()
/*p:<root>(setFoo) p:JavaClass(setFoo) p:foo(setFoo) p:foo.bar(setFoo)*/j.setFoo(2)
/*p:JavaClass(setFoo) p:foo.bar(setFoo)*/j.setFoo(2)
/*p:JavaClass(foo)*/j.foo = 2
/*p:JavaClass(foo)*/j.foo
/*p:JavaClass(bar)*/j.bar
@@ -16,7 +16,7 @@ package foo.bar
/*p:JavaClass(bazBaz)*/j.bazBaz
/*p:JavaClass(bazBaz)*/j.bazBaz = ""
/*p:JavaClass(setBoo)*/j.setBoo(2)
/*p:<root>(boo) p:JavaClass(boo) p:foo(boo) p:foo.bar(boo)*/j.boo = 2
/*p:JavaClass(boo) p:foo.bar(boo)*/j.boo = 2
/*p:foo.KotlinClass(getFoo)*/k.getFoo() // getFoo may be an inner class in JavaClass
/*p:foo.KotlinClass(setFoo)*/k.setFoo(2)
/*p:foo.KotlinClass(foo)*/k.foo = 2
@@ -26,5 +26,5 @@ package foo.bar
/*p:JavaClass(bazBaz) p:foo.KotlinClass(bazBaz)*/k.bazBaz
/*p:JavaClass(bazBaz) p:foo.KotlinClass(bazBaz)*/k.bazBaz = ""
/*p:JavaClass(setBoo) p:foo.KotlinClass(setBoo)*/k.setBoo(2)
/*p:<root>(boo) p:foo(boo) p:foo.KotlinClass(boo) p:foo.bar(boo)*/k.boo = 2
/*p:foo.KotlinClass(boo) p:foo.bar(boo)*/k.boo = 2
}