From deda5e7eee407922e30a10bd7656fc7726f67c2f Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Wed, 6 Sep 2017 21:38:13 +0300 Subject: [PATCH] Fix navigation to script dependency sources failing Specifically in case where some lib is in project and script dependencies at the same time --- .../kotlin/idea/caches/resolve/getModuleInfo.kt | 13 ++++--------- .../navigation/conflictingModule/lib/test/custom.kt | 7 +++++++ .../navigation/conflictingModule/script.kts | 7 +++++++ .../ScriptConfigurationNavigationTestGenerated.java | 6 ++++++ 4 files changed, 24 insertions(+), 9 deletions(-) create mode 100644 idea/testData/script/definition/navigation/conflictingModule/lib/test/custom.kt create mode 100644 idea/testData/script/definition/navigation/conflictingModule/script.kts diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/getModuleInfo.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/getModuleInfo.kt index e41c16c1681..9ebf037dc03 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/getModuleInfo.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/getModuleInfo.kt @@ -191,17 +191,12 @@ fun getBinaryLibrariesModuleInfos(project: Project, virtualFile: VirtualFile) = fun getLibrarySourcesModuleInfos(project: Project, virtualFile: VirtualFile) = collectModuleInfosByType(project, virtualFile) private inline fun collectModuleInfosByType(project: Project, virtualFile: VirtualFile): Collection { - val orderEntries = ProjectFileIndex.SERVICE.getInstance(project).getOrderEntriesForFile(virtualFile) - - val result = linkedSetOf() - orderEntries.process(project, virtualFile, treatAsLibrarySource = false) { - result.add(it as? T) + val result = linkedSetOf() + processVirtualFile(project, virtualFile, treatAsLibrarySource = false) { + result.addIfNotNull(it as? T) } - // NOTE: non idea model infos can be obtained this way, like script related infos - // only one though, luckily it covers existing cases - result.add(getModuleInfoByVirtualFile(project, virtualFile) as? T) - return result.filterNotNull() + return result } private inline fun List.process( diff --git a/idea/testData/script/definition/navigation/conflictingModule/lib/test/custom.kt b/idea/testData/script/definition/navigation/conflictingModule/lib/test/custom.kt new file mode 100644 index 00000000000..e98015f518f --- /dev/null +++ b/idea/testData/script/definition/navigation/conflictingModule/lib/test/custom.kt @@ -0,0 +1,7 @@ +package test + +object KObject { + fun foo() { + + } +} \ No newline at end of file diff --git a/idea/testData/script/definition/navigation/conflictingModule/script.kts b/idea/testData/script/definition/navigation/conflictingModule/script.kts new file mode 100644 index 00000000000..1629950abab --- /dev/null +++ b/idea/testData/script/definition/navigation/conflictingModule/script.kts @@ -0,0 +1,7 @@ +test.KObject.foo() + +// DEPENDENCIES: classpath:lib-classes; sources:lib-source +// CONFLICTING_MODULE + +// REF: (in test.KObject).foo() +// FILE: test/custom.kt \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/script/ScriptConfigurationNavigationTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/script/ScriptConfigurationNavigationTestGenerated.java index c1beaf21b2e..9b7329a7f82 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/script/ScriptConfigurationNavigationTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/script/ScriptConfigurationNavigationTestGenerated.java @@ -36,6 +36,12 @@ public class ScriptConfigurationNavigationTestGenerated extends AbstractScriptCo KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/script/definition/navigation"), Pattern.compile("^([^\\.]+)$"), TargetBackend.ANY, false); } + @TestMetadata("conflictingModule") + public void testConflictingModule() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/script/definition/navigation/conflictingModule/"); + doTest(fileName); + } + @TestMetadata("customBaseClass") public void testCustomBaseClass() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/script/definition/navigation/customBaseClass/");