From ebd3ac6dc84e4c7065f74315e8a1e2c56d71c02d Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Wed, 6 Sep 2017 21:31:29 +0300 Subject: [PATCH] Fix script resolver failing Specifically the case where some lib is in project dependencies and script dependencies at the same time #EA-105435 at least partially fixed #KT-19458 Fixed #KT-19474 Fixed --- .../kotlin/idea/caches/resolve/ResolutionFacadeImpl.kt | 3 ++- .../highlighting/conflictingModule/lib/test/Utils.java | 7 +++++++ .../definition/highlighting/conflictingModule/script.kts | 6 ++++++ .../ScriptConfigurationHighlightingTestGenerated.java | 6 ++++++ 4 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 idea/testData/script/definition/highlighting/conflictingModule/lib/test/Utils.java create mode 100644 idea/testData/script/definition/highlighting/conflictingModule/script.kts diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ResolutionFacadeImpl.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ResolutionFacadeImpl.kt index ab377531150..8e9e9a15df3 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ResolutionFacadeImpl.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ResolutionFacadeImpl.kt @@ -33,6 +33,7 @@ import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.lazy.AbsentDescriptorHandler import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.lazy.ResolveSession +import org.jetbrains.kotlin.utils.addToStdlib.firstNotNullResult internal class ResolutionFacadeImpl( private val projectFacade: ProjectResolutionFacade, @@ -84,7 +85,7 @@ internal class ResolutionFacadeImpl( } override fun tryGetFrontendService(element: PsiElement, serviceClass: Class): T? { - return projectFacade.resolverForModuleInfo(element.getModuleInfo()).componentProvider.tryGetService(serviceClass) + return element.getModuleInfos().firstNotNullResult { projectFacade.tryGetResolverForModuleInfo(it)?.componentProvider?.tryGetService(serviceClass) } } fun getFrontendService(ideaModuleInfo: IdeaModuleInfo, serviceClass: Class): T { diff --git a/idea/testData/script/definition/highlighting/conflictingModule/lib/test/Utils.java b/idea/testData/script/definition/highlighting/conflictingModule/lib/test/Utils.java new file mode 100644 index 00000000000..7a7f234c677 --- /dev/null +++ b/idea/testData/script/definition/highlighting/conflictingModule/lib/test/Utils.java @@ -0,0 +1,7 @@ +package test; + +public class Utils { + public static void foo(String str) { + + } +} \ No newline at end of file diff --git a/idea/testData/script/definition/highlighting/conflictingModule/script.kts b/idea/testData/script/definition/highlighting/conflictingModule/script.kts new file mode 100644 index 00000000000..a2adea21834 --- /dev/null +++ b/idea/testData/script/definition/highlighting/conflictingModule/script.kts @@ -0,0 +1,6 @@ +fun f(g: Utils) { + +} + +// DEPENDENCIES: classpath:lib-classes +// CONFLICTING_MODULE \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/script/ScriptConfigurationHighlightingTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/script/ScriptConfigurationHighlightingTestGenerated.java index 1b1585008d0..efb24b88b27 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/script/ScriptConfigurationHighlightingTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/script/ScriptConfigurationHighlightingTestGenerated.java @@ -54,6 +54,12 @@ public class ScriptConfigurationHighlightingTestGenerated extends AbstractScript doTest(fileName); } + @TestMetadata("conflictingModule") + public void testConflictingModule() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/script/definition/highlighting/conflictingModule/"); + doTest(fileName); + } + @TestMetadata("customBaseClass") public void testCustomBaseClass() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/script/definition/highlighting/customBaseClass/");