diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/TowerLevels.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/TowerLevels.kt index c4c5a82c91f..a593f8107a5 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/TowerLevels.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/TowerLevels.kt @@ -454,14 +454,16 @@ internal class ScopeTowerLevel( info: CallInfo, processor: TowerScopeLevelProcessor> ): ProcessResult { + val lookupTracker = session.lookupTracker var empty = true - session.lookupTracker?.recordCallLookup(info, scope.scopeOwnerLookupNames) + lookupTracker?.recordCallLookup(info, scope.scopeOwnerLookupNames) scope.processFunctionsAndConstructorsByName( info, session, bodyResolveComponents, constructorFilter ) { candidate -> + lookupTracker?.recordCallableCandidateAsLookup(candidate, info.callSite.source, info.containingFile.source) empty = false consumeCallableCandidate(candidate, info, processor) } @@ -472,9 +474,11 @@ internal class ScopeTowerLevel( info: CallInfo, processor: TowerScopeLevelProcessor> ): ProcessResult { + val lookupTracker = session.lookupTracker var empty = true - session.lookupTracker?.recordCallLookup(info, scope.scopeOwnerLookupNames) + lookupTracker?.recordCallLookup(info, scope.scopeOwnerLookupNames) scope.processPropertiesByName(info.name) { candidate -> + lookupTracker?.recordCallableCandidateAsLookup(candidate, info.callSite.source, info.containingFile.source) empty = false consumeCallableCandidate(candidate, info, processor) } diff --git a/jps/jps-plugin/testData/incremental/lookupTracker/jsKlib/conventions/mathematicalLike.kt b/jps/jps-plugin/testData/incremental/lookupTracker/jsKlib/conventions/mathematicalLike.kt index a194ba1b297..5f42f4d72ac 100644 --- a/jps/jps-plugin/testData/incremental/lookupTracker/jsKlib/conventions/mathematicalLike.kt +++ b/jps/jps-plugin/testData/incremental/lookupTracker/jsKlib/conventions/mathematicalLike.kt @@ -17,8 +17,8 @@ package foo.bar /*p:foo.bar(A) p:foo.bar(div) p:foo.bar(divAssign) p:foo.bar.A(div) p:foo.bar.A(divAssign)*/a /= b // for var - /*p:foo.bar(A) p:foo.bar(plusAssign) p:foo.bar.A(plus) p:foo.bar.A(plusAssign)*/d += b - /*p:foo.bar(A) p:foo.bar(minus) p:foo.bar(minusAssign) p:foo.bar.A(minus) p:foo.bar.A(minusAssign)*/d -= b + /*p:foo.bar(A) p:foo.bar(plusAssign) p:foo.bar.A(plus) p:foo.bar.A(plusAssign) p:kotlin.collections(plusAssign)*/d += b + /*p:foo.bar(A) p:foo.bar(minus) p:foo.bar(minusAssign) p:foo.bar.A(minus) p:foo.bar.A(minusAssign) p:kotlin.collections(minusAssign)*/d -= b /*p:foo.bar(A) p:foo.bar(times) p:foo.bar.A(times) p:foo.bar.A(timesAssign)*/d *= b /*p:foo.bar(A) p:foo.bar(div) p:foo.bar(divAssign) p:foo.bar.A(div) p:foo.bar.A(divAssign)*/d /= b } diff --git a/jps/jps-plugin/testData/incremental/lookupTracker/jsKlib/expressionType/inferredType.kt b/jps/jps-plugin/testData/incremental/lookupTracker/jsKlib/expressionType/inferredType.kt index 3812b68f664..8f26f73f10e 100644 --- a/jps/jps-plugin/testData/incremental/lookupTracker/jsKlib/expressionType/inferredType.kt +++ b/jps/jps-plugin/testData/incremental/lookupTracker/jsKlib/expressionType/inferredType.kt @@ -6,8 +6,8 @@ package foo /*p:foo*/fun getA() = /*p:foo*/A() /*p:foo*/fun getB() = /*p:foo*/B() -/*p:foo*/fun getListOfA() = /*p:foo p:foo(A) p:kotlin.collections(List)*/listOf(/*p:foo*/A()) -/*p:foo*/fun getListOfB() = /*p:foo p:foo(B) p:kotlin.collections(List)*/listOf(/*p:foo*/B()) +/*p:foo*/fun getListOfA() = /*p:foo p:foo(A) p:kotlin.collections p:kotlin.collections(List)*/listOf(/*p:foo*/A()) +/*p:foo*/fun getListOfB() = /*p:foo p:foo(B) p:kotlin.collections p:kotlin.collections(List)*/listOf(/*p:foo*/B()) /*p:foo*/fun useListOfA(a: /*p:foo p:foo(A) p:kotlin.collections*/List) {} /*p:foo*/fun useListOfB(b: /*p:foo p:foo(B) p:kotlin.collections*/List) {} diff --git a/jps/jps-plugin/testData/incremental/lookupTracker/jvm/conventions/mathematicalLike.kt b/jps/jps-plugin/testData/incremental/lookupTracker/jvm/conventions/mathematicalLike.kt index a194ba1b297..5a00d6cfc5a 100644 --- a/jps/jps-plugin/testData/incremental/lookupTracker/jvm/conventions/mathematicalLike.kt +++ b/jps/jps-plugin/testData/incremental/lookupTracker/jvm/conventions/mathematicalLike.kt @@ -13,12 +13,12 @@ package foo.bar /*p:foo.bar(not) p:foo.bar.A(not)*/!/*p:foo.bar(A)*/a // for val - /*p:foo.bar(A) p:foo.bar(times) p:foo.bar.A(times) p:foo.bar.A(timesAssign)*/a *= b - /*p:foo.bar(A) p:foo.bar(div) p:foo.bar(divAssign) p:foo.bar.A(div) p:foo.bar.A(divAssign)*/a /= b + /*p:foo.bar(A) p:foo.bar(times) p:foo.bar.A(times) p:foo.bar.A(timesAssign) p:java.math(BigDecimal) p:java.math(BigInteger) p:kotlin(times)*/a *= b + /*p:foo.bar(A) p:foo.bar(div) p:foo.bar(divAssign) p:foo.bar.A(div) p:foo.bar.A(divAssign) p:java.math(BigDecimal) p:java.math(BigInteger) p:kotlin(div)*/a /= b // for var - /*p:foo.bar(A) p:foo.bar(plusAssign) p:foo.bar.A(plus) p:foo.bar.A(plusAssign)*/d += b - /*p:foo.bar(A) p:foo.bar(minus) p:foo.bar(minusAssign) p:foo.bar.A(minus) p:foo.bar.A(minusAssign)*/d -= b - /*p:foo.bar(A) p:foo.bar(times) p:foo.bar.A(times) p:foo.bar.A(timesAssign)*/d *= b - /*p:foo.bar(A) p:foo.bar(div) p:foo.bar(divAssign) p:foo.bar.A(div) p:foo.bar.A(divAssign)*/d /= b + /*p:foo.bar(A) p:foo.bar(plusAssign) p:foo.bar.A(plus) p:foo.bar.A(plusAssign) p:kotlin.collections(plusAssign)*/d += b + /*p:foo.bar(A) p:foo.bar(minus) p:foo.bar(minusAssign) p:foo.bar.A(minus) p:foo.bar.A(minusAssign) p:kotlin.collections(minusAssign)*/d -= b + /*p:foo.bar(A) p:foo.bar(times) p:foo.bar.A(times) p:foo.bar.A(timesAssign) p:java.math(BigDecimal) p:java.math(BigInteger) p:kotlin(times)*/d *= b + /*p:foo.bar(A) p:foo.bar(div) p:foo.bar(divAssign) p:foo.bar.A(div) p:foo.bar.A(divAssign) p:java.math(BigDecimal) p:java.math(BigInteger) p:kotlin(div)*/d /= b } diff --git a/jps/jps-plugin/testData/incremental/lookupTracker/jvm/expressionType/inferredType.kt b/jps/jps-plugin/testData/incremental/lookupTracker/jvm/expressionType/inferredType.kt index 3812b68f664..8f26f73f10e 100644 --- a/jps/jps-plugin/testData/incremental/lookupTracker/jvm/expressionType/inferredType.kt +++ b/jps/jps-plugin/testData/incremental/lookupTracker/jvm/expressionType/inferredType.kt @@ -6,8 +6,8 @@ package foo /*p:foo*/fun getA() = /*p:foo*/A() /*p:foo*/fun getB() = /*p:foo*/B() -/*p:foo*/fun getListOfA() = /*p:foo p:foo(A) p:kotlin.collections(List)*/listOf(/*p:foo*/A()) -/*p:foo*/fun getListOfB() = /*p:foo p:foo(B) p:kotlin.collections(List)*/listOf(/*p:foo*/B()) +/*p:foo*/fun getListOfA() = /*p:foo p:foo(A) p:kotlin.collections p:kotlin.collections(List)*/listOf(/*p:foo*/A()) +/*p:foo*/fun getListOfB() = /*p:foo p:foo(B) p:kotlin.collections p:kotlin.collections(List)*/listOf(/*p:foo*/B()) /*p:foo*/fun useListOfA(a: /*p:foo p:foo(A) p:kotlin.collections*/List) {} /*p:foo*/fun useListOfB(b: /*p:foo p:foo(B) p:kotlin.collections*/List) {} 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 974bdb54320..8bbdf7be7b0 100644 --- a/jps/jps-plugin/testData/incremental/lookupTracker/jvm/java/usages.kt +++ b/jps/jps-plugin/testData/incremental/lookupTracker/jvm/java/usages.kt @@ -18,7 +18,7 @@ import baz.* // inherited from I /*p:bar(C) p:bar.C(ifunc)*/c.ifunc() - /*p:bar.C(isfield) p:baz p:foo*/C.isfield + /*p:bar.C(isfield) p:baz p:foo p:foo.I(isfield)*/C.isfield // expected error: Unresolved reference: IS /*p:bar.C(IS) p:baz p:baz(IS) p:foo p:foo(IS)*/C.IS() diff --git a/jps/jps-plugin/testData/incremental/lookupTracker/jvm/javaStatics/Main.java b/jps/jps-plugin/testData/incremental/lookupTracker/jvm/javaStatics/Main.java index 6065429bbd1..27fcbb9f9d3 100644 --- a/jps/jps-plugin/testData/incremental/lookupTracker/jvm/javaStatics/Main.java +++ b/jps/jps-plugin/testData/incremental/lookupTracker/jvm/javaStatics/Main.java @@ -3,4 +3,12 @@ public class Main { public static String staticField = ""; public void regularMethod() {} public String regularField = ""; + + public void invoke() { + } + + public static Main INSTANCE = new Main(); + + public static class Other extends Main { + } } \ 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 index 4d4d4f5fb48..a4ee9dfd448 100644 --- a/jps/jps-plugin/testData/incremental/lookupTracker/jvm/javaStatics/build.log +++ b/jps/jps-plugin/testData/incremental/lookupTracker/jvm/javaStatics/build.log @@ -1,4 +1,6 @@ ==== INITIAL BUILD ==== Compiling files: + src/instanceUsage0.kt + src/instanceUsage1.kt src/kotlinUsage.kt Exit code: OK \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/lookupTracker/jvm/javaStatics/instanceUsage0.K1.kt b/jps/jps-plugin/testData/incremental/lookupTracker/jvm/javaStatics/instanceUsage0.K1.kt new file mode 100644 index 00000000000..92539a205a0 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/lookupTracker/jvm/javaStatics/instanceUsage0.K1.kt @@ -0,0 +1,5 @@ +/*p:Main.Other(INSTANCE)*/import /*p:*/Main./*p:Main*/Other.INSTANCE + +/*p:*/fun foo() { + /*p:Main(invoke) p:Main.Other*/INSTANCE() +} diff --git a/jps/jps-plugin/testData/incremental/lookupTracker/jvm/javaStatics/instanceUsage0.kt b/jps/jps-plugin/testData/incremental/lookupTracker/jvm/javaStatics/instanceUsage0.kt new file mode 100644 index 00000000000..87aa6f01f7b --- /dev/null +++ b/jps/jps-plugin/testData/incremental/lookupTracker/jvm/javaStatics/instanceUsage0.kt @@ -0,0 +1,5 @@ +/*p:Main.Other(INSTANCE)*/import Main.Other.INSTANCE + +/*p:*/fun foo() { + /*p:Main(invoke) p:Main.Other*/INSTANCE() +} diff --git a/jps/jps-plugin/testData/incremental/lookupTracker/jvm/javaStatics/instanceUsage1.K1.kt b/jps/jps-plugin/testData/incremental/lookupTracker/jvm/javaStatics/instanceUsage1.K1.kt new file mode 100644 index 00000000000..d3b812079aa --- /dev/null +++ b/jps/jps-plugin/testData/incremental/lookupTracker/jvm/javaStatics/instanceUsage1.K1.kt @@ -0,0 +1,5 @@ +import /*p:*/Main./*p:Main*/Other.* + +/*p:*/fun bar() { + /*p: p:(invoke) p:Main(invoke) p:Main.Other p:Main.Other(invoke)*/INSTANCE() +} diff --git a/jps/jps-plugin/testData/incremental/lookupTracker/jvm/javaStatics/instanceUsage1.kt b/jps/jps-plugin/testData/incremental/lookupTracker/jvm/javaStatics/instanceUsage1.kt new file mode 100644 index 00000000000..a75f6541c79 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/lookupTracker/jvm/javaStatics/instanceUsage1.kt @@ -0,0 +1,5 @@ +import Main.Other.* + +/*p:*/fun bar() { + /*p: p:Main(invoke) p:Main.Other*/INSTANCE() +} diff --git a/jps/jps-plugin/testData/incremental/lookupTracker/jvm/nested/MainClass.kt b/jps/jps-plugin/testData/incremental/lookupTracker/jvm/nested/MainClass.kt index e3eb2af5074..bc757ed1dd7 100644 --- a/jps/jps-plugin/testData/incremental/lookupTracker/jvm/nested/MainClass.kt +++ b/jps/jps-plugin/testData/incremental/lookupTracker/jvm/nested/MainClass.kt @@ -1,4 +1,7 @@ -/*p:*/class MainClass { + +package one + +/*p:one*/class MainClass { class NestedClass { object A { class B { diff --git a/jps/jps-plugin/testData/incremental/lookupTracker/jvm/nested/usage.K1.kt b/jps/jps-plugin/testData/incremental/lookupTracker/jvm/nested/usage.K1.kt index 5062940c886..1891c257d2b 100644 --- a/jps/jps-plugin/testData/incremental/lookupTracker/jvm/nested/usage.K1.kt +++ b/jps/jps-plugin/testData/incremental/lookupTracker/jvm/nested/usage.K1.kt @@ -1,7 +1,9 @@ -/*p:*/fun usageAsCall(): /*p:*/Int /*p:kotlin(Nothing)*/{ - val f = /*p: p:MainClass.NestedClass.A.B(F) 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*/MainClass./*p:MainClass*/NestedClass./*p:MainClass.NestedClass*/A./*p:MainClass.NestedClass.A*/B./*p:MainClass.NestedClass.A.B*/F - /*p:kotlin(Nothing)*/return /*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*/MainClass./*p:MainClass*/NestedClass./*p:MainClass.NestedClass*/A./*p:MainClass.NestedClass.A*/B./*p:MainClass.NestedClass.A.B*/F./*p:MainClass.NestedClass.A.B.F*/x +package one + +/*p:one*/fun usageAsCall(): /*p:one*/Int /*p:kotlin(Nothing)*/{ + val f = /*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 p:one p:one.MainClass.NestedClass.A.B(F)*/MainClass./*p:one.MainClass*/NestedClass./*p:one.MainClass.NestedClass*/A./*p:one.MainClass.NestedClass.A*/B./*p:one.MainClass.NestedClass.A.B*/F + /*p:kotlin(Nothing)*/return /*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 p:one*/MainClass./*p:one.MainClass*/NestedClass./*p:one.MainClass.NestedClass*/A./*p:one.MainClass.NestedClass.A*/B./*p:one.MainClass.NestedClass.A.B*/F./*p:one.MainClass.NestedClass.A.B.F*/x } -/*p:*/fun usageAsType(f: /*p:*/MainClass./*p:MainClass*/NestedClass./*p:MainClass.NestedClass*/A./*p:MainClass.NestedClass.A*/B./*p:MainClass.NestedClass.A.B*/F) {} +/*p:one*/fun usageAsType(f: /*p:one*/MainClass./*p:one.MainClass*/NestedClass./*p:one.MainClass.NestedClass*/A./*p:one.MainClass.NestedClass.A*/B./*p:one.MainClass.NestedClass.A.B*/F) {} diff --git a/jps/jps-plugin/testData/incremental/lookupTracker/jvm/nested/usage.kt b/jps/jps-plugin/testData/incremental/lookupTracker/jvm/nested/usage.kt index 000456329c0..d6a12fc85b6 100644 --- a/jps/jps-plugin/testData/incremental/lookupTracker/jvm/nested/usage.kt +++ b/jps/jps-plugin/testData/incremental/lookupTracker/jvm/nested/usage.kt @@ -1,7 +1,9 @@ -/*p:*/fun usageAsCall(): /*p:*/Int { - val f = /*p: p:MainClass(NestedClass) p:MainClass.NestedClass(A) p:MainClass.NestedClass.A(B) p:MainClass.NestedClass.A.B(F)*/MainClass.NestedClass./*p:MainClass.NestedClass*/A.B./*p:MainClass.NestedClass.A.B*/F - return /*p: p:MainClass(NestedClass) p:MainClass.NestedClass(A) p:MainClass.NestedClass.A(B) p:MainClass.NestedClass.A.B(F) p:MainClass.NestedClass.A.B.F(x)*/MainClass.NestedClass./*p:MainClass.NestedClass*/A.B./*p:MainClass.NestedClass.A.B*/F.x +package one + +/*p:one*/fun usageAsCall(): /*p:one*/Int { + val f = /*p:one p:one.MainClass(NestedClass) p:one.MainClass.NestedClass(A) p:one.MainClass.NestedClass.A(B) p:one.MainClass.NestedClass.A.B(F)*/MainClass.NestedClass./*p:one.MainClass.NestedClass*/A.B./*p:one.MainClass.NestedClass.A.B*/F + return /*p:one p:one.MainClass(NestedClass) p:one.MainClass.NestedClass(A) p:one.MainClass.NestedClass.A(B) p:one.MainClass.NestedClass.A.B(F) p:one.MainClass.NestedClass.A.B.F(x)*/MainClass.NestedClass./*p:one.MainClass.NestedClass*/A.B./*p:one.MainClass.NestedClass.A.B*/F.x } -/*p:*/fun usageAsType(f: /*p: p:MainClass(NestedClass) p:MainClass.NestedClass(A) p:MainClass.NestedClass.A(B) p:MainClass.NestedClass.A.B(F)*/MainClass.NestedClass.A.B.F) = /*p:MainClass.NestedClass.A.B(F)*/f +/*p:one*/fun usageAsType(f: /*p:one p:one.MainClass(NestedClass) p:one.MainClass.NestedClass(A) p:one.MainClass.NestedClass.A(B) p:one.MainClass.NestedClass.A.B(F)*/MainClass.NestedClass.A.B.F) = /*p:one.MainClass.NestedClass.A.B(F)*/f