From 5ab812e29e86cdb8b027696881efb2b773a11569 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Thu, 15 Nov 2018 12:17:38 +0300 Subject: [PATCH] Enlarge scope for auto-import and completion with extensions (KT-27944) Android R classes provided with scope enlarger and they can be found during resolve, but ignored during auto-import search. --- .../idea/caches/project/IdeaModuleInfos.kt | 9 +-------- .../idea/caches/resolve/util/scopeUtils.kt | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt index d96f406545e..4c2d57ec892 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt @@ -30,6 +30,7 @@ import org.jetbrains.kotlin.caches.project.LibraryModuleInfo import org.jetbrains.kotlin.caches.resolve.resolution import org.jetbrains.kotlin.config.KotlinSourceRootType import org.jetbrains.kotlin.descriptors.ModuleDescriptor +import org.jetbrains.kotlin.idea.caches.resolve.util.enlargedSearchScope import org.jetbrains.kotlin.idea.configuration.BuildSystemType import org.jetbrains.kotlin.idea.configuration.getBuildSystemType import org.jetbrains.kotlin.idea.core.isInTestSourceContentKotlinAware @@ -61,14 +62,6 @@ interface IdeaModuleInfo : org.jetbrains.kotlin.idea.caches.resolve.IdeaModuleIn override fun dependencies(): List } -private fun enlargedSearchScope(searchScope: GlobalSearchScope, moduleFile: VirtualFile?): GlobalSearchScope { - if (moduleFile == null) return searchScope - return ResolveScopeEnlarger.EP_NAME.extensions.fold(searchScope) { scope, enlarger -> - val extra = enlarger.getAdditionalResolveScope(moduleFile, scope.project) - if (extra != null) scope.union(extra) else scope - } -} - private fun orderEntryToModuleInfo(project: Project, orderEntry: OrderEntry, forProduction: Boolean): List { fun Module.toInfos() = correspondingModuleInfos().filter { !forProduction || it is ModuleProductionSourceInfo } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/util/scopeUtils.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/util/scopeUtils.kt index 72f3deaebf0..9de2bda5ef1 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/util/scopeUtils.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/util/scopeUtils.kt @@ -5,6 +5,9 @@ package org.jetbrains.kotlin.idea.caches.resolve.util +import com.intellij.openapi.vfs.VirtualFile +import com.intellij.psi.PsiFile +import com.intellij.psi.ResolveScopeEnlarger import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.kotlin.idea.caches.project.ModuleSourceInfo import org.jetbrains.kotlin.idea.caches.project.ScriptModuleInfo @@ -29,8 +32,22 @@ fun getResolveScope(file: KtFile): GlobalSearchScope { } return when (file.getModuleInfo()) { - is ModuleSourceInfo -> KotlinSourceFilterScope.projectSourceAndClassFiles(file.resolveScope, file.project) + is ModuleSourceInfo -> enlargedSearchScope(KotlinSourceFilterScope.projectSourceAndClassFiles(file.resolveScope, file.project), file) is ScriptModuleInfo -> file.getModuleInfo().dependencies().map { it.contentScope() }.let { GlobalSearchScope.union(it.toTypedArray()) } else -> GlobalSearchScope.EMPTY_SCOPE } } + +fun enlargedSearchScope(searchScope: GlobalSearchScope, psiFile: PsiFile?): GlobalSearchScope { + val virtualFile = psiFile?.originalFile?.virtualFile + return enlargedSearchScope(searchScope, virtualFile) +} + +fun enlargedSearchScope(searchScope: GlobalSearchScope, moduleFile: VirtualFile?): GlobalSearchScope { + if (moduleFile == null) return searchScope + + return ResolveScopeEnlarger.EP_NAME.extensions.fold(searchScope) { scope, enlarger -> + val extra = enlarger.getAdditionalResolveScope(moduleFile, scope.project) + if (extra != null) scope.union(extra) else scope + } +} \ No newline at end of file