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 }