From 893479bd5edfe252a68af5adf98158e1cd3ee560 Mon Sep 17 00:00:00 2001 From: Alexander Podkhalyuzin Date: Mon, 14 Jan 2019 10:53:41 +0300 Subject: [PATCH] Implemented KotlinResolveScopeEnlarger for modules Before that we had dependency to iml file, which is incorrect --- .../idea/caches/project/IdeaModuleInfos.kt | 7 +++-- .../idea/caches/resolve/util/scopeUtils.kt | 28 +++++++++++++------ idea/resources/META-INF/extensions/ide.xml | 3 ++ .../META-INF/extensions/ide.xml.as33 | 3 ++ .../META-INF/extensions/ide.xml.as34 | 3 ++ 5 files changed, 33 insertions(+), 11 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 17c22a454f3..d638ed0f888 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 @@ -16,7 +16,6 @@ import com.intellij.openapi.roots.impl.libraries.LibraryEx import com.intellij.openapi.roots.libraries.Library import com.intellij.openapi.util.ModificationTracker import com.intellij.openapi.vfs.VirtualFile -import com.intellij.psi.ResolveScopeEnlarger import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.util.CachedValueProvider import com.intellij.util.PathUtil @@ -170,7 +169,9 @@ data class ModuleProductionSourceInfo internal constructor( override val stableName: Name = module.getStableName() - override fun contentScope(): GlobalSearchScope = enlargedSearchScope(ModuleProductionSourceScope(module), module.moduleFile) + override fun contentScope(): GlobalSearchScope { + return enlargedSearchScope(ModuleProductionSourceScope(module), module, isTestScope = false) + } override fun createCachedValueProvider(f: () -> CachedValueProvider.Result) = CachedValueProvider { f() } } @@ -186,7 +187,7 @@ data class ModuleTestSourceInfo internal constructor(override val module: Module override val displayedName get() = module.name + " (test)" - override fun contentScope(): GlobalSearchScope = enlargedSearchScope(ModuleTestSourceScope(module), module.moduleFile) + override fun contentScope(): GlobalSearchScope = enlargedSearchScope(ModuleTestSourceScope(module), module, isTestScope = true) override fun modulesWhoseInternalsAreVisible() = module.cached(CachedValueProvider { val list = SmartList() 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 9de2bda5ef1..349d01c4248 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,10 +5,12 @@ package org.jetbrains.kotlin.idea.caches.resolve.util -import com.intellij.openapi.vfs.VirtualFile +import com.intellij.openapi.extensions.ExtensionPointName +import com.intellij.openapi.module.Module import com.intellij.psi.PsiFile import com.intellij.psi.ResolveScopeEnlarger import com.intellij.psi.search.GlobalSearchScope +import com.intellij.psi.search.SearchScope import org.jetbrains.kotlin.idea.caches.project.ModuleSourceInfo import org.jetbrains.kotlin.idea.caches.project.ScriptModuleInfo import org.jetbrains.kotlin.idea.caches.project.SourceForBinaryModuleInfo @@ -39,15 +41,25 @@ fun getResolveScope(file: KtFile): GlobalSearchScope { } 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 + val vFile = psiFile?.originalFile?.virtualFile ?: return searchScope return ResolveScopeEnlarger.EP_NAME.extensions.fold(searchScope) { scope, enlarger -> - val extra = enlarger.getAdditionalResolveScope(moduleFile, scope.project) + val extra = enlarger.getAdditionalResolveScope(vFile, scope.project) if (extra != null) scope.union(extra) else scope } +} + +fun enlargedSearchScope(searchScope: GlobalSearchScope, module: Module, isTestScope: Boolean): GlobalSearchScope { + return KotlinResolveScopeEnlarger.EP_NAME.extensions.fold(searchScope) { scope, enlarger -> + val extra = enlarger.getAdditionalResolveScope(module, isTestScope) + if (extra != null) scope.union(extra) else scope + } +} + +abstract class KotlinResolveScopeEnlarger { + abstract fun getAdditionalResolveScope(module: Module, isTestScope: Boolean): SearchScope? + + companion object { + val EP_NAME = ExtensionPointName.create("org.jetbrains.kotlin.resolveScopeEnlarger") + } } \ No newline at end of file diff --git a/idea/resources/META-INF/extensions/ide.xml b/idea/resources/META-INF/extensions/ide.xml index b052b7bb4bd..2132e30276e 100644 --- a/idea/resources/META-INF/extensions/ide.xml +++ b/idea/resources/META-INF/extensions/ide.xml @@ -54,6 +54,9 @@ + + diff --git a/idea/resources/META-INF/extensions/ide.xml.as33 b/idea/resources/META-INF/extensions/ide.xml.as33 index f8162af5d68..45a7f3e9b27 100644 --- a/idea/resources/META-INF/extensions/ide.xml.as33 +++ b/idea/resources/META-INF/extensions/ide.xml.as33 @@ -46,6 +46,9 @@ + + diff --git a/idea/resources/META-INF/extensions/ide.xml.as34 b/idea/resources/META-INF/extensions/ide.xml.as34 index f8162af5d68..45a7f3e9b27 100644 --- a/idea/resources/META-INF/extensions/ide.xml.as34 +++ b/idea/resources/META-INF/extensions/ide.xml.as34 @@ -46,6 +46,9 @@ + +