From 02ee641daa6bfa08154eefa7203b9c2e352a47f3 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Fri, 16 Feb 2018 16:38:57 +0300 Subject: [PATCH] Add CommonModuleResolveScopeEnlarger providing correct scope for commons So #KT-22873 Fixed So #KT-22858 Fixed So #KT-22853 Fixed --- idea/src/META-INF/plugin.xml | 2 + .../idea/CommonModuleResolveScopeEnlarger.kt | 40 +++++++++++++++++++ .../jetbrains/kotlin/idea/facet/facetUtils.kt | 2 +- 3 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 idea/src/org/jetbrains/kotlin/idea/CommonModuleResolveScopeEnlarger.kt diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml index 99afd33c530..9a5a03a1e7f 100644 --- a/idea/src/META-INF/plugin.xml +++ b/idea/src/META-INF/plugin.xml @@ -795,6 +795,8 @@ + + diff --git a/idea/src/org/jetbrains/kotlin/idea/CommonModuleResolveScopeEnlarger.kt b/idea/src/org/jetbrains/kotlin/idea/CommonModuleResolveScopeEnlarger.kt new file mode 100644 index 00000000000..050c4e19b1f --- /dev/null +++ b/idea/src/org/jetbrains/kotlin/idea/CommonModuleResolveScopeEnlarger.kt @@ -0,0 +1,40 @@ +/* + * Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.idea + +import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProviderImpl +import com.intellij.openapi.project.Project +import com.intellij.openapi.roots.JdkOrderEntry +import com.intellij.openapi.roots.ModuleRootManager +import com.intellij.openapi.roots.ProjectFileIndex +import com.intellij.openapi.roots.impl.LibraryScopeCache +import com.intellij.openapi.vfs.VirtualFile +import com.intellij.psi.ResolveScopeEnlarger +import com.intellij.psi.search.GlobalSearchScope +import com.intellij.psi.search.SearchScope +import org.jetbrains.kotlin.config.TargetPlatformKind +import org.jetbrains.kotlin.idea.facet.findImplementingModules +import org.jetbrains.kotlin.idea.project.targetPlatform + +class CommonModuleResolveScopeEnlarger : ResolveScopeEnlarger() { + override fun getAdditionalResolveScope(file: VirtualFile, project: Project): SearchScope? { + val module = ProjectFileIndex.getInstance(project).getModuleForFile(file) + if (module?.targetPlatform != TargetPlatformKind.Common) return null + + val implementingModule = module.findImplementingModules(IdeModifiableModelsProviderImpl(project)).find { + it.targetPlatform is TargetPlatformKind.Jvm + } ?: return null + + var result = GlobalSearchScope.EMPTY_SCOPE + for (entry in ModuleRootManager.getInstance(implementingModule).orderEntries) { + if (entry is JdkOrderEntry) { + val scopeForSdk = LibraryScopeCache.getInstance(project).getScopeForSdk(entry) + result = result.uniteWith(scopeForSdk) + } + } + return result + } +} \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt b/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt index 3591af741c1..85536f07973 100644 --- a/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt @@ -123,7 +123,7 @@ val mavenLibraryIdToPlatform: Map> by lazy { .toMap() } -private fun Module.findImplementingModules(modelsProvider: IdeModifiableModelsProvider): List { +internal fun Module.findImplementingModules(modelsProvider: IdeModifiableModelsProvider): List { return modelsProvider.modules.filter { module -> module.findImplementedModuleName(modelsProvider) == name }