From 26b57c6250149185c6608b9533432c45eda54b18 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Tue, 24 Jul 2018 12:33:58 +0300 Subject: [PATCH] MPP navigation / search: handle expect objects correctly #KT-25317 Fixed --- .../search/ideaExtensions/KotlinDefinitionsSearcher.kt | 4 ++++ .../multiModule/expectCompanion/common/common.kt | 10 ++++++++++ .../multiModule/expectCompanion/js/js.kt | 7 +++++++ .../multiModule/expectCompanion/jvm/jvm.kt | 7 +++++++ .../multiModule/expectObject/common/common.kt | 7 +++++++ .../implementations/multiModule/expectObject/js/js.kt | 3 +++ .../multiModule/expectObject/jvm/jvm.kt | 3 +++ ...tlinGotoImplementationMultiModuleTestGenerated.java | 10 ++++++++++ .../org/jetbrains/kotlin/test/util/ReferenceUtils.kt | 2 +- 9 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 idea/testData/navigation/implementations/multiModule/expectCompanion/common/common.kt create mode 100644 idea/testData/navigation/implementations/multiModule/expectCompanion/js/js.kt create mode 100644 idea/testData/navigation/implementations/multiModule/expectCompanion/jvm/jvm.kt create mode 100644 idea/testData/navigation/implementations/multiModule/expectObject/common/common.kt create mode 100644 idea/testData/navigation/implementations/multiModule/expectObject/js/js.kt create mode 100644 idea/testData/navigation/implementations/multiModule/expectObject/jvm/jvm.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinDefinitionsSearcher.kt b/idea/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinDefinitionsSearcher.kt index e93dfb2100f..36dac99979f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinDefinitionsSearcher.kt +++ b/idea/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinDefinitionsSearcher.kt @@ -53,6 +53,10 @@ class KotlinDefinitionsSearcher : QueryExecutor { + processActualDeclarations(element, consumer) + } + is KtLightClass -> { val useScope = runReadAction { element.useScope } if (useScope is LocalSearchScope) diff --git a/idea/testData/navigation/implementations/multiModule/expectCompanion/common/common.kt b/idea/testData/navigation/implementations/multiModule/expectCompanion/common/common.kt new file mode 100644 index 00000000000..5aa9fec9c1a --- /dev/null +++ b/idea/testData/navigation/implementations/multiModule/expectCompanion/common/common.kt @@ -0,0 +1,10 @@ +package test + +expect class Owner { + companion object { + + } +} + +// REF: companion object of [testModule_JVM] (test).Owner +// REF: companion object of [testModule_JS] (test).Owner diff --git a/idea/testData/navigation/implementations/multiModule/expectCompanion/js/js.kt b/idea/testData/navigation/implementations/multiModule/expectCompanion/js/js.kt new file mode 100644 index 00000000000..d00d8c4b0b3 --- /dev/null +++ b/idea/testData/navigation/implementations/multiModule/expectCompanion/js/js.kt @@ -0,0 +1,7 @@ +package test + +actual class Owner { + actual companion object { + + } +} diff --git a/idea/testData/navigation/implementations/multiModule/expectCompanion/jvm/jvm.kt b/idea/testData/navigation/implementations/multiModule/expectCompanion/jvm/jvm.kt new file mode 100644 index 00000000000..d00d8c4b0b3 --- /dev/null +++ b/idea/testData/navigation/implementations/multiModule/expectCompanion/jvm/jvm.kt @@ -0,0 +1,7 @@ +package test + +actual class Owner { + actual companion object { + + } +} diff --git a/idea/testData/navigation/implementations/multiModule/expectObject/common/common.kt b/idea/testData/navigation/implementations/multiModule/expectObject/common/common.kt new file mode 100644 index 00000000000..c62e7f3203f --- /dev/null +++ b/idea/testData/navigation/implementations/multiModule/expectObject/common/common.kt @@ -0,0 +1,7 @@ +package test + +expect object Obj + +// REF: [testModule_JVM] (test).Obj +// REF: [testModule_JS] (test).Obj + diff --git a/idea/testData/navigation/implementations/multiModule/expectObject/js/js.kt b/idea/testData/navigation/implementations/multiModule/expectObject/js/js.kt new file mode 100644 index 00000000000..9b6c3da8f2a --- /dev/null +++ b/idea/testData/navigation/implementations/multiModule/expectObject/js/js.kt @@ -0,0 +1,3 @@ +package test + +actual object Obj \ No newline at end of file diff --git a/idea/testData/navigation/implementations/multiModule/expectObject/jvm/jvm.kt b/idea/testData/navigation/implementations/multiModule/expectObject/jvm/jvm.kt new file mode 100644 index 00000000000..9b6c3da8f2a --- /dev/null +++ b/idea/testData/navigation/implementations/multiModule/expectObject/jvm/jvm.kt @@ -0,0 +1,3 @@ +package test + +actual object Obj \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/navigation/KotlinGotoImplementationMultiModuleTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/navigation/KotlinGotoImplementationMultiModuleTestGenerated.java index 3db25aa3640..2aeebe64d2e 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/navigation/KotlinGotoImplementationMultiModuleTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/navigation/KotlinGotoImplementationMultiModuleTestGenerated.java @@ -59,6 +59,16 @@ public class KotlinGotoImplementationMultiModuleTestGenerated extends AbstractKo runTest("idea/testData/navigation/implementations/multiModule/expectClassSuperclassProperty/"); } + @TestMetadata("expectCompanion") + public void testExpectCompanion() throws Exception { + runTest("idea/testData/navigation/implementations/multiModule/expectCompanion/"); + } + + @TestMetadata("expectObject") + public void testExpectObject() throws Exception { + runTest("idea/testData/navigation/implementations/multiModule/expectObject/"); + } + @TestMetadata("suspendFunImpl") public void testSuspendFunImpl() throws Exception { runTest("idea/testData/navigation/implementations/multiModule/suspendFunImpl/"); diff --git a/idea/tests/org/jetbrains/kotlin/test/util/ReferenceUtils.kt b/idea/tests/org/jetbrains/kotlin/test/util/ReferenceUtils.kt index 8890c82bcbc..cd30abe7975 100644 --- a/idea/tests/org/jetbrains/kotlin/test/util/ReferenceUtils.kt +++ b/idea/tests/org/jetbrains/kotlin/test/util/ReferenceUtils.kt @@ -37,7 +37,7 @@ fun PsiElement.renderAsGotoImplementation(renderModule: Boolean = false): String if (navigationElement is KtObjectDeclaration && navigationElement.isCompanion()) { //default presenter return null for companion object val containingClass = PsiTreeUtil.getParentOfType(navigationElement, KtClass::class.java)!! - return "companion object of " + containingClass.renderAsGotoImplementation() + return "companion object of " + containingClass.renderAsGotoImplementation(renderModule) } if (navigationElement is KtStringTemplateExpression) {