Optimize PluginDeclarationProviderFactory.getStubBasedPackageMemberDeclarationProvider

Add cache for fast package exists check in specific module
 #KT-16850 fixed
This commit is contained in:
Simon Ogorodnik
2017-03-30 20:40:54 +03:00
parent 9ca65fcf99
commit 2380e0bacc
12 changed files with 222 additions and 11 deletions
@@ -101,7 +101,8 @@ object DefaultAnalyzerFacade : AnalyzerFacade<PlatformAnalysisParameters>() {
val project = moduleContext.project
val declarationProviderFactory = DeclarationProviderFactoryService.createDeclarationProviderFactory(
project, moduleContext.storageManager, syntheticFiles,
if (moduleInfo.isLibrary) GlobalSearchScope.EMPTY_SCOPE else moduleContentScope
if (moduleInfo.isLibrary) GlobalSearchScope.EMPTY_SCOPE else moduleContentScope,
moduleInfo
)
val trace = CodeAnalyzerInitializer.getInstance(project).createTrace()
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.resolve.lazy.declarations
import com.intellij.openapi.project.Project
import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.analyzer.ModuleInfo
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.storage.StorageManager
import org.jetbrains.kotlin.utils.sure
@@ -29,7 +30,8 @@ class CliDeclarationProviderFactoryService(private val sourceFiles: Collection<K
project: Project,
storageManager: StorageManager,
syntheticFiles: Collection<KtFile>,
filesScope: GlobalSearchScope
filesScope: GlobalSearchScope,
moduleInfo: ModuleInfo
): DeclarationProviderFactory {
val allFiles = ArrayList<KtFile>()
sourceFiles.filterTo(allFiles) {
@@ -21,6 +21,7 @@ import com.intellij.openapi.project.Project
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.psi.search.DelegatingGlobalSearchScope
import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.analyzer.ModuleInfo
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.storage.StorageManager
import java.util.*
@@ -31,7 +32,8 @@ abstract class DeclarationProviderFactoryService {
project: Project,
storageManager: StorageManager,
syntheticFiles: Collection<KtFile>,
filesScope: GlobalSearchScope
filesScope: GlobalSearchScope,
moduleInfo: ModuleInfo
): DeclarationProviderFactory
companion object {
@@ -39,10 +41,11 @@ abstract class DeclarationProviderFactoryService {
project: Project,
storageManager: StorageManager,
syntheticFiles: Collection<KtFile>,
filesScope: GlobalSearchScope
filesScope: GlobalSearchScope,
moduleInfo: ModuleInfo
): DeclarationProviderFactory {
return ServiceManager.getService(project, DeclarationProviderFactoryService::class.java)!!
.create(project, storageManager, syntheticFiles, filteringScope(syntheticFiles, filesScope))
.create(project, storageManager, syntheticFiles, filteringScope(syntheticFiles, filesScope), moduleInfo)
}
private fun filteringScope(syntheticFiles: Collection<KtFile>, baseScope: GlobalSearchScope): GlobalSearchScope {