From 88cea0a88c99b9626639f15201f87953526fac9c Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Thu, 22 Nov 2018 16:33:18 +0300 Subject: [PATCH] Navigation to implementation: do not try to find expect enum inheritors Before this commit, expect enum could find actual enum entries as its implementation, now it cannot. #KT-28206 Fixed --- .../search/ideaExtensions/KotlinDefinitionsSearcher.kt | 7 ++++++- .../multiModule/expectEnumEntry/common/Some.kt | 8 ++++++++ .../multiModule/expectEnumEntry/jvm/Some.kt | 6 ++++++ .../KotlinGotoImplementationMultiModuleTestGenerated.java | 5 +++++ 4 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 idea/testData/navigation/implementations/multiModule/expectEnumEntry/common/Some.kt create mode 100644 idea/testData/navigation/implementations/multiModule/expectEnumEntry/jvm/Some.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 36dac99979f..cf9533f1242 100644 --- a/idea/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinDefinitionsSearcher.kt +++ b/idea/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinDefinitionsSearcher.kt @@ -50,7 +50,12 @@ class KotlinDefinitionsSearcher : QueryExecutor { - processClassImplementations(element, consumer) && processActualDeclarations(element, consumer) + val isExpectEnum = runReadAction { element.isEnum() && element.isExpectDeclaration() } + if (isExpectEnum) { + processActualDeclarations(element, consumer) + } else { + processClassImplementations(element, consumer) && processActualDeclarations(element, consumer) + } } is KtObjectDeclaration -> { diff --git a/idea/testData/navigation/implementations/multiModule/expectEnumEntry/common/Some.kt b/idea/testData/navigation/implementations/multiModule/expectEnumEntry/common/Some.kt new file mode 100644 index 00000000000..74d69d11111 --- /dev/null +++ b/idea/testData/navigation/implementations/multiModule/expectEnumEntry/common/Some.kt @@ -0,0 +1,8 @@ +package test + +expect enum class Some { + FIRST, + SECOND +} + +// REF: [testModule_JVM] (test).Some diff --git a/idea/testData/navigation/implementations/multiModule/expectEnumEntry/jvm/Some.kt b/idea/testData/navigation/implementations/multiModule/expectEnumEntry/jvm/Some.kt new file mode 100644 index 00000000000..dca1af883df --- /dev/null +++ b/idea/testData/navigation/implementations/multiModule/expectEnumEntry/jvm/Some.kt @@ -0,0 +1,6 @@ +package test + +actual enum class Some(val x: Int) { + FIRST(1), + SECOND(2) +} \ 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 2aeebe64d2e..5df4bf528d8 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/navigation/KotlinGotoImplementationMultiModuleTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/navigation/KotlinGotoImplementationMultiModuleTestGenerated.java @@ -64,6 +64,11 @@ public class KotlinGotoImplementationMultiModuleTestGenerated extends AbstractKo runTest("idea/testData/navigation/implementations/multiModule/expectCompanion/"); } + @TestMetadata("expectEnumEntry") + public void testExpectEnumEntry() throws Exception { + runTest("idea/testData/navigation/implementations/multiModule/expectEnumEntry/"); + } + @TestMetadata("expectObject") public void testExpectObject() throws Exception { runTest("idea/testData/navigation/implementations/multiModule/expectObject/");