From 31e73e90d68c4814ec969c010bc92b3ca2fe2b2c Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Wed, 24 Jan 2018 15:59:27 +0300 Subject: [PATCH] Explicitly state that PluginDeclarationProviderFactory is source-only Before this change `filesScope` was effectively empty in cases when module info is a library, thus looking into PackageIndexUtil.packageExists(name, indexedFilesScope, project) was kind of redundant since it always returns false for empty scopes The initial motivation was run by 1716720604397d49d9e3c897fdc0b85782b98032 that made PackageIndexUtil::packageExists calls much more frequent --- .../kotlin/resolve/jvm/JvmAnalyzerFacade.kt | 3 +- .../kotlin/analyzer/AnalyzerFacade.kt | 2 -- .../analyzer/common/CommonAnalyzerFacade.kt | 2 +- .../DeclarationProviderFactoryService.kt | 4 +-- .../kotlin/caches/resolve/JsAnalyzerFacade.kt | 3 +- .../idea/caches/resolve/IdeaModuleInfos.kt | 8 +---- .../idea/stubindex/KotlinSourceFilterScope.kt | 4 --- .../PluginDeclarationProviderFactory.kt | 7 ++--- ...PluginDeclarationProviderFactoryService.kt | 29 ++++++++++++++----- 9 files changed, 31 insertions(+), 31 deletions(-) diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/JvmAnalyzerFacade.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/JvmAnalyzerFacade.kt index f9170c38687..5c8e3b4139f 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/JvmAnalyzerFacade.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/JvmAnalyzerFacade.kt @@ -16,7 +16,6 @@ package org.jetbrains.kotlin.resolve.jvm -import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.kotlin.analyzer.* import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.container.get @@ -58,7 +57,7 @@ object JvmAnalyzerFacade : AnalyzerFacade() { val project = moduleContext.project val declarationProviderFactory = DeclarationProviderFactoryService.createDeclarationProviderFactory( project, moduleContext.storageManager, syntheticFiles, - if (moduleInfo.isLibrary) GlobalSearchScope.EMPTY_SCOPE else moduleContentScope, + moduleContentScope, moduleInfo ) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt index 84172a5f852..9edefc8aa81 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt @@ -233,8 +233,6 @@ data class ModuleContent( interface PlatformAnalysisParameters interface ModuleInfo { - val isLibrary: Boolean - get() = false val name: Name val displayedName: String get() = name.asString() fun dependencies(): List diff --git a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/common/CommonAnalyzerFacade.kt b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/common/CommonAnalyzerFacade.kt index 57c58e4179b..27f243fa041 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/common/CommonAnalyzerFacade.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/common/CommonAnalyzerFacade.kt @@ -112,7 +112,7 @@ object CommonAnalyzerFacade : AnalyzerFacade() { val project = moduleContext.project val declarationProviderFactory = DeclarationProviderFactoryService.createDeclarationProviderFactory( project, moduleContext.storageManager, syntheticFiles, - if (moduleInfo.isLibrary) GlobalSearchScope.EMPTY_SCOPE else moduleContentScope, + moduleContentScope, moduleInfo ) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/declarations/DeclarationProviderFactoryService.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/declarations/DeclarationProviderFactoryService.kt index 45458b8131b..d6fde89c425 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/declarations/DeclarationProviderFactoryService.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/declarations/DeclarationProviderFactoryService.kt @@ -42,11 +42,11 @@ abstract class DeclarationProviderFactoryService { project: Project, storageManager: StorageManager, syntheticFiles: Collection, - filesScope: GlobalSearchScope, + moduleContentScope: GlobalSearchScope, moduleInfo: ModuleInfo ): DeclarationProviderFactory { return ServiceManager.getService(project, DeclarationProviderFactoryService::class.java)!! - .create(project, storageManager, syntheticFiles, filteringScope(syntheticFiles, filesScope), moduleInfo) + .create(project, storageManager, syntheticFiles, filteringScope(syntheticFiles, moduleContentScope), moduleInfo) } private fun filteringScope(syntheticFiles: Collection, baseScope: GlobalSearchScope): GlobalSearchScope { diff --git a/idea/ide-common/src/org/jetbrains/kotlin/caches/resolve/JsAnalyzerFacade.kt b/idea/ide-common/src/org/jetbrains/kotlin/caches/resolve/JsAnalyzerFacade.kt index 32e742241a6..35293f8d135 100644 --- a/idea/ide-common/src/org/jetbrains/kotlin/caches/resolve/JsAnalyzerFacade.kt +++ b/idea/ide-common/src/org/jetbrains/kotlin/caches/resolve/JsAnalyzerFacade.kt @@ -16,7 +16,6 @@ package org.jetbrains.kotlin.idea.caches.resolve -import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.kotlin.analyzer.* import org.jetbrains.kotlin.caches.resolve.LibraryModuleInfo import org.jetbrains.kotlin.config.TargetPlatformVersion @@ -56,7 +55,7 @@ object JsAnalyzerFacade : AnalyzerFacade() { project, moduleContext.storageManager, syntheticFiles, - if (moduleInfo.isLibrary) GlobalSearchScope.EMPTY_SCOPE else moduleContentScope, + moduleContentScope, moduleInfo ) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IdeaModuleInfos.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IdeaModuleInfos.kt index f8d908913fc..2d4bda4cd91 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IdeaModuleInfos.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IdeaModuleInfos.kt @@ -221,9 +221,6 @@ class LibraryInfo(val project: Project, val library: Library) : IdeaModuleInfo, override fun contentScope(): GlobalSearchScope = LibraryWithoutSourceScope(project, library) - override val isLibrary: Boolean - get() = true - override fun dependencies(): List { val result = LinkedHashSet() result.add(this) @@ -261,9 +258,6 @@ data class LibrarySourceInfo(val project: Project, val library: Library) : IdeaM override fun sourceScope(): GlobalSearchScope = KotlinSourceFilterScope.librarySources(LibrarySourceScope(project, library), project) - override val isLibrary: Boolean - get() = true - override fun modulesWhoseInternalsAreVisible(): Collection { return listOf(LibraryInfo(project, library)) } @@ -366,4 +360,4 @@ interface SourceForBinaryModuleInfo : IdeaModuleInfo { override val moduleOrigin: ModuleOrigin get() = ModuleOrigin.OTHER -} \ No newline at end of file +} diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/stubindex/KotlinSourceFilterScope.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/stubindex/KotlinSourceFilterScope.kt index d69d5d8a6ff..be3a0cd3782 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/stubindex/KotlinSourceFilterScope.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/stubindex/KotlinSourceFilterScope.kt @@ -18,7 +18,6 @@ package org.jetbrains.kotlin.idea.stubindex import com.intellij.openapi.project.Project import com.intellij.openapi.roots.ProjectRootManager -import com.intellij.openapi.util.Ref import com.intellij.openapi.vfs.VirtualFile import com.intellij.psi.search.DelegatingGlobalSearchScope import com.intellij.psi.search.GlobalSearchScope @@ -86,9 +85,6 @@ class KotlinSourceFilterScope private constructor( @JvmStatic fun projectSourceAndClassFiles(delegate: GlobalSearchScope, project: Project) = create(delegate, true, false, true, false, project) - @JvmStatic - fun sources(delegate: GlobalSearchScope, project: Project) = create(delegate, true, false, false, true, project) - @JvmStatic fun projectSources(delegate: GlobalSearchScope, project: Project) = create(delegate, true, false, false, false, project) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/stubindex/resolve/PluginDeclarationProviderFactory.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/stubindex/resolve/PluginDeclarationProviderFactory.kt index 4f03ede358a..990345d2a51 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/stubindex/resolve/PluginDeclarationProviderFactory.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/stubindex/resolve/PluginDeclarationProviderFactory.kt @@ -61,10 +61,9 @@ class PluginDeclarationProviderFactory( fileBasedDeclarationProviderFactory.packageExists(fqName) || stubBasedPackageExists(fqName) private fun stubBasedPackageExists(name: FqName): Boolean { - return if (moduleInfo is ModuleSourceInfo) - project.service().packageExists(name, moduleInfo) - else - PackageIndexUtil.packageExists(name, indexedFilesScope, project) + // We're only looking for source-based declarations + val moduleSourceInfo = moduleInfo as? ModuleSourceInfo ?: return false + return project.service().packageExists(name, moduleSourceInfo) } private fun getStubBasedPackageMemberDeclarationProvider(name: FqName): PackageMemberDeclarationProvider? { diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/stubindex/resolve/PluginDeclarationProviderFactoryService.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/stubindex/resolve/PluginDeclarationProviderFactoryService.kt index 61061617e4d..c8b8a7dc9de 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/stubindex/resolve/PluginDeclarationProviderFactoryService.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/stubindex/resolve/PluginDeclarationProviderFactoryService.kt @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.idea.stubindex.resolve import com.intellij.openapi.project.Project import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.kotlin.analyzer.ModuleInfo +import org.jetbrains.kotlin.idea.caches.resolve.ModuleSourceInfo import org.jetbrains.kotlin.idea.stubindex.KotlinSourceFilterScope import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory @@ -28,11 +29,25 @@ import org.jetbrains.kotlin.storage.StorageManager class PluginDeclarationProviderFactoryService : DeclarationProviderFactoryService() { override fun create( - project: Project, - storageManager: StorageManager, - syntheticFiles: Collection, - filesScope: GlobalSearchScope, - moduleInfo: ModuleInfo - ): DeclarationProviderFactory = - PluginDeclarationProviderFactory(project, KotlinSourceFilterScope.sources(filesScope, project), storageManager, syntheticFiles, moduleInfo) + project: Project, + storageManager: StorageManager, + syntheticFiles: Collection, + filesScope: GlobalSearchScope, + moduleInfo: ModuleInfo + ): DeclarationProviderFactory { + if (syntheticFiles.isEmpty() && moduleInfo !is ModuleSourceInfo) { + // No actual source declarations for libraries + // Even in case of libraries sources they should be obtained through the classpath with subsequent decompiling + // Anyway, we'll filter them out with `KotlinSourceFilterScope.sources` call below + return DeclarationProviderFactory.EMPTY + } + + return PluginDeclarationProviderFactory( + project, + KotlinSourceFilterScope.projectSources(filesScope, project), + storageManager, + syntheticFiles, + moduleInfo + ) + } }