From fe4e0e9c2e9121ce446534fb990e7cd8d603664e Mon Sep 17 00:00:00 2001 From: Ilya Chernikov Date: Tue, 27 Feb 2024 15:05:45 +0100 Subject: [PATCH] K2 IC: fix class members lookups recording in particular - statics #KTIJ-24830 fixed --- .../impl/FirClassDeclaredMemberScope.kt | 6 ++++- .../kotlin/fir/scopes/impl/FirStaticScope.kt | 3 +++ .../build/JvmLookupTrackerTestGenerated.java | 5 +++++ .../K1JvmLookupTrackerTestGenerated.java | 5 +++++ .../jsKlib/classifierMembers/usages.kt | 10 ++++----- .../jsKlib/classifierMembers/usages.kt.new.2 | 14 ++++++------ .../lookupTracker/jvm/SAM/usages.kt | 4 ++-- .../jvm/classifierMembers/usages.kt | 10 ++++----- .../jvm/classifierMembers/usages.kt.new.2 | 14 ++++++------ .../lookupTracker/jvm/java/usages.kt | 22 +++++++++---------- .../lookupTracker/jvm/javaStatics/Main.java | 6 +++++ .../lookupTracker/jvm/javaStatics/build.log | 4 ++++ .../jvm/javaStatics/kotlinUsage.K1.kt | 6 +++++ .../jvm/javaStatics/kotlinUsage.kt | 6 +++++ 14 files changed, 77 insertions(+), 38 deletions(-) create mode 100644 jps/jps-plugin/testData/incremental/lookupTracker/jvm/javaStatics/Main.java create mode 100644 jps/jps-plugin/testData/incremental/lookupTracker/jvm/javaStatics/build.log create mode 100644 jps/jps-plugin/testData/incremental/lookupTracker/jvm/javaStatics/kotlinUsage.K1.kt create mode 100644 jps/jps-plugin/testData/incremental/lookupTracker/jvm/javaStatics/kotlinUsage.kt diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassDeclaredMemberScope.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassDeclaredMemberScope.kt index 62f19404469..9b033e14ac1 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassDeclaredMemberScope.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassDeclaredMemberScope.kt @@ -17,8 +17,12 @@ import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.SpecialNames +import org.jetbrains.kotlin.utils.SmartList -abstract class FirClassDeclaredMemberScope(val classId: ClassId) : FirContainingNamesAwareScope() +abstract class FirClassDeclaredMemberScope(val classId: ClassId) : FirContainingNamesAwareScope() { + + override val scopeOwnerLookupNames: List = SmartList(classId.asFqNameString()) +} class FirClassDeclaredMemberScopeImpl( val useSiteSession: FirSession, diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirStaticScope.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirStaticScope.kt index f0afba63477..66b4a5142a4 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirStaticScope.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirStaticScope.kt @@ -45,4 +45,7 @@ class FirStaticScope(private val delegateScope: FirContainingNamesAwareScope) : override fun getClassifierNames(): Set { return delegateScope.getClassifierNames() } + + override val scopeOwnerLookupNames: List + get() = delegateScope.scopeOwnerLookupNames } diff --git a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/JvmLookupTrackerTestGenerated.java b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/JvmLookupTrackerTestGenerated.java index 93fda19b0e8..187582960b4 100644 --- a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/JvmLookupTrackerTestGenerated.java +++ b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/JvmLookupTrackerTestGenerated.java @@ -49,6 +49,11 @@ public class JvmLookupTrackerTestGenerated extends AbstractJvmLookupTrackerTest runTest("jps/jps-plugin/testData/incremental/lookupTracker/jvm/java/"); } + @TestMetadata("javaStatics") + public void testJavaStatics() { + runTest("jps/jps-plugin/testData/incremental/lookupTracker/jvm/javaStatics/"); + } + @TestMetadata("jvmNameChanged") public void testJvmNameChanged() { runTest("jps/jps-plugin/testData/incremental/lookupTracker/jvm/jvmNameChanged/"); diff --git a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/K1JvmLookupTrackerTestGenerated.java b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/K1JvmLookupTrackerTestGenerated.java index c0f6c441af6..0f23527f1e8 100644 --- a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/K1JvmLookupTrackerTestGenerated.java +++ b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/K1JvmLookupTrackerTestGenerated.java @@ -49,6 +49,11 @@ public class K1JvmLookupTrackerTestGenerated extends AbstractK1JvmLookupTrackerT runTest("jps/jps-plugin/testData/incremental/lookupTracker/jvm/java/"); } + @TestMetadata("javaStatics") + public void testJavaStatics() { + runTest("jps/jps-plugin/testData/incremental/lookupTracker/jvm/javaStatics/"); + } + @TestMetadata("jvmNameChanged") public void testJvmNameChanged() { runTest("jps/jps-plugin/testData/incremental/lookupTracker/jvm/jvmNameChanged/"); diff --git a/jps/jps-plugin/testData/incremental/lookupTracker/jsKlib/classifierMembers/usages.kt b/jps/jps-plugin/testData/incremental/lookupTracker/jsKlib/classifierMembers/usages.kt index b5afea902c4..1f275bde7e8 100644 --- a/jps/jps-plugin/testData/incremental/lookupTracker/jsKlib/classifierMembers/usages.kt +++ b/jps/jps-plugin/testData/incremental/lookupTracker/jsKlib/classifierMembers/usages.kt @@ -29,11 +29,11 @@ import bar.* 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:bar p:foo*/E.X - /*p:bar p:foo p:foo.E(a)*/E.X.a - /*p:bar p:foo p:foo.E(foo)*/E.Y.foo() - /*p:bar p:foo p:kotlin(Array)*/E.values() - /*p:bar p:foo*/E.valueOf("") + /*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(values) p:kotlin(Array)*/E.values() + /*p:bar p:foo p:foo.E(valueOf)*/E.valueOf("") } /*p:foo*/fun classifiers( diff --git a/jps/jps-plugin/testData/incremental/lookupTracker/jsKlib/classifierMembers/usages.kt.new.2 b/jps/jps-plugin/testData/incremental/lookupTracker/jsKlib/classifierMembers/usages.kt.new.2 index 7c5646a4816..0d855d69345 100644 --- a/jps/jps-plugin/testData/incremental/lookupTracker/jsKlib/classifierMembers/usages.kt.new.2 +++ b/jps/jps-plugin/testData/incremental/lookupTracker/jsKlib/classifierMembers/usages.kt.new.2 @@ -31,13 +31,13 @@ import bar.* 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:bar p:foo*/E.X - /*p:bar p:foo p:foo.E(a)*/E.X.a - /*p:bar p:foo p:foo.E(foo)*/E.Y.foo() - /*p:bar p:foo p:kotlin(Array)*/E.values() - /*p:bar p:foo*/E.valueOf("") - /*p:bar p:bar(foo) p:foo p:foo(foo)*/E.foo - /*p:bar p:bar(bar) p:foo p:foo(bar)*/E.bar() + /*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(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 + /*p:bar p:bar(bar) p:foo p:foo(bar) p:foo.E(bar)*/E.bar() } /*p:foo*/fun classifiers( diff --git a/jps/jps-plugin/testData/incremental/lookupTracker/jvm/SAM/usages.kt b/jps/jps-plugin/testData/incremental/lookupTracker/jvm/SAM/usages.kt index 2206afcb5cb..35075bd67c5 100644 --- a/jps/jps-plugin/testData/incremental/lookupTracker/jvm/SAM/usages.kt +++ b/jps/jps-plugin/testData/incremental/lookupTracker/jvm/SAM/usages.kt @@ -6,8 +6,8 @@ package foo /*p:bar(foo) p:bar.C(foo) p:foo(foo)*/c.foo() /*p:bar(SAMInterface) p:bar.C(foo) p:bar/SAMInterface()*/c.foo /*p:kotlin(Function1)*/{ } - /*p:bar p:bar(bar) p:foo p:foo(bar)*/C.bar() - /*p:bar p:bar(SAMInterface) p:bar/SAMInterface() p:foo*/C.bar /*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() p:foo*/C.bar /*p:kotlin(Function1)*/{} /*p:bar p:foo*/SAMInterface() /*p:bar*/SAMInterface /*p:kotlin(Function1)*/{} diff --git a/jps/jps-plugin/testData/incremental/lookupTracker/jvm/classifierMembers/usages.kt b/jps/jps-plugin/testData/incremental/lookupTracker/jvm/classifierMembers/usages.kt index b5afea902c4..1f275bde7e8 100644 --- a/jps/jps-plugin/testData/incremental/lookupTracker/jvm/classifierMembers/usages.kt +++ b/jps/jps-plugin/testData/incremental/lookupTracker/jvm/classifierMembers/usages.kt @@ -29,11 +29,11 @@ import bar.* 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:bar p:foo*/E.X - /*p:bar p:foo p:foo.E(a)*/E.X.a - /*p:bar p:foo p:foo.E(foo)*/E.Y.foo() - /*p:bar p:foo p:kotlin(Array)*/E.values() - /*p:bar p:foo*/E.valueOf("") + /*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(values) p:kotlin(Array)*/E.values() + /*p:bar p:foo p:foo.E(valueOf)*/E.valueOf("") } /*p:foo*/fun classifiers( diff --git a/jps/jps-plugin/testData/incremental/lookupTracker/jvm/classifierMembers/usages.kt.new.2 b/jps/jps-plugin/testData/incremental/lookupTracker/jvm/classifierMembers/usages.kt.new.2 index 7c5646a4816..0d855d69345 100644 --- a/jps/jps-plugin/testData/incremental/lookupTracker/jvm/classifierMembers/usages.kt.new.2 +++ b/jps/jps-plugin/testData/incremental/lookupTracker/jvm/classifierMembers/usages.kt.new.2 @@ -31,13 +31,13 @@ import bar.* 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:bar p:foo*/E.X - /*p:bar p:foo p:foo.E(a)*/E.X.a - /*p:bar p:foo p:foo.E(foo)*/E.Y.foo() - /*p:bar p:foo p:kotlin(Array)*/E.values() - /*p:bar p:foo*/E.valueOf("") - /*p:bar p:bar(foo) p:foo p:foo(foo)*/E.foo - /*p:bar p:bar(bar) p:foo p:foo(bar)*/E.bar() + /*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(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 + /*p:bar p:bar(bar) p:foo p:foo(bar) p:foo.E(bar)*/E.bar() } /*p:foo*/fun classifiers( diff --git a/jps/jps-plugin/testData/incremental/lookupTracker/jvm/java/usages.kt b/jps/jps-plugin/testData/incremental/lookupTracker/jvm/java/usages.kt index f1bdc8ebf6a..10180adb73e 100644 --- a/jps/jps-plugin/testData/incremental/lookupTracker/jvm/java/usages.kt +++ b/jps/jps-plugin/testData/incremental/lookupTracker/jvm/java/usages.kt @@ -11,27 +11,27 @@ import baz.* /*p:bar.C(func)*/c.func() /*p:bar(B) p:bar.C(B) p:bar.C.B(B)*/c.B() - /*p:bar p:baz p:foo*/C.sfield - /*p:bar p:baz p:foo*/C.sfield = "new" - /*p:bar p:baz p:foo*/C.sfunc() - /*p:bar p:bar(S) p:baz p:foo*/C.S() + /*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() // inherited from I /*p:bar.C(ifunc)*/c.ifunc() - /*p:bar p:baz p:foo*/C.isfield + /*p:bar p:bar.C(isfield) p:baz p:foo*/C.isfield // expected error: Unresolved reference: IS - /*p:bar p:bar(IS) p:baz p:baz(IS) p:foo p:foo(IS)*/C.IS() + /*p:bar p:bar(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 /*p:foo.I(ifunc)*/i.ifunc() - /*p:bar p:baz p:foo*/I.isfield - /*p:bar p:baz p:foo p:foo(IS)*/I.IS() + /*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:bar p:baz p:foo*/E.F - /*p:bar p:baz p:baz.E(field) p:foo*/E.F.field - /*p:bar p:baz p:baz.E(func) p:foo*/E.S.func() + /*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() } fun classifiers( diff --git a/jps/jps-plugin/testData/incremental/lookupTracker/jvm/javaStatics/Main.java b/jps/jps-plugin/testData/incremental/lookupTracker/jvm/javaStatics/Main.java new file mode 100644 index 00000000000..6065429bbd1 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/lookupTracker/jvm/javaStatics/Main.java @@ -0,0 +1,6 @@ +public class Main { + public static void staticMethod() {} + public static String staticField = ""; + public void regularMethod() {} + public String regularField = ""; +} \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/lookupTracker/jvm/javaStatics/build.log b/jps/jps-plugin/testData/incremental/lookupTracker/jvm/javaStatics/build.log new file mode 100644 index 00000000000..4d4d4f5fb48 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/lookupTracker/jvm/javaStatics/build.log @@ -0,0 +1,4 @@ +==== INITIAL BUILD ==== +Compiling files: + src/kotlinUsage.kt +Exit code: OK \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/lookupTracker/jvm/javaStatics/kotlinUsage.K1.kt b/jps/jps-plugin/testData/incremental/lookupTracker/jvm/javaStatics/kotlinUsage.K1.kt new file mode 100644 index 00000000000..1e0e4328e6f --- /dev/null +++ b/jps/jps-plugin/testData/incremental/lookupTracker/jvm/javaStatics/kotlinUsage.K1.kt @@ -0,0 +1,6 @@ +/*p:*/fun kotlinUsage() { + /*p: p:java.lang p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.comparisons p:kotlin.io p:kotlin.jvm p:kotlin.ranges p:kotlin.sequences p:kotlin.text*/Main./*p:Main*/staticMethod() + val s = /*p: p:java.lang p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.comparisons p:kotlin.io p:kotlin.jvm p:kotlin.ranges p:kotlin.sequences p:kotlin.text*/Main./*p:Main*/staticField + /*p:*/Main()./*p:Main*/regularMethod() + val r = /*p:*/Main()./*p:Main*/regularField +} \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/lookupTracker/jvm/javaStatics/kotlinUsage.kt b/jps/jps-plugin/testData/incremental/lookupTracker/jvm/javaStatics/kotlinUsage.kt new file mode 100644 index 00000000000..e53cb3fb8ff --- /dev/null +++ b/jps/jps-plugin/testData/incremental/lookupTracker/jvm/javaStatics/kotlinUsage.kt @@ -0,0 +1,6 @@ +/*p:*/fun kotlinUsage() { + /*p: p:Main(staticMethod)*/Main.staticMethod() + /*p: p:Main(regularMethod)*/Main().regularMethod() + val s = /*p: p:Main(staticField)*/Main.staticField + val r = /*p: p:Main(regularField)*/Main().regularField +} \ No newline at end of file