AA: cache PackagePartProvider per scope
This commit is contained in:
committed by
Ilya Kirillov
parent
2580a5c233
commit
e5b75dcd72
+23
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* 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.analysis.api.standalone
|
||||
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import com.intellij.util.containers.ContainerUtil
|
||||
import org.jetbrains.kotlin.analysis.providers.PackagePartProviderFactory
|
||||
import org.jetbrains.kotlin.load.kotlin.PackagePartProvider
|
||||
|
||||
internal class KotlinStaticPackagePartProviderFactory(
|
||||
private val packagePartProvider: (GlobalSearchScope) -> PackagePartProvider,
|
||||
) : PackagePartProviderFactory() {
|
||||
private val cache = ContainerUtil.createConcurrentSoftMap<GlobalSearchScope, PackagePartProvider>()
|
||||
|
||||
override fun createPackagePartProvider(scope: GlobalSearchScope): PackagePartProvider {
|
||||
return cache.getOrPut(scope) {
|
||||
packagePartProvider(scope)
|
||||
}
|
||||
}
|
||||
}
|
||||
+3
-10
@@ -139,11 +139,7 @@ public class StandaloneAnalysisAPISessionBuilder(
|
||||
RegisterComponentService.registerLLFirResolveSessionService(this)
|
||||
registerService(
|
||||
PackagePartProviderFactory::class.java,
|
||||
object : PackagePartProviderFactory() {
|
||||
override fun createPackagePartProvider(scope: GlobalSearchScope): PackagePartProvider {
|
||||
return packagePartProvider(scope)
|
||||
}
|
||||
}
|
||||
KotlinStaticPackagePartProviderFactory(packagePartProvider)
|
||||
)
|
||||
|
||||
registerService(ClsJavaStubByVirtualFileCache::class.java, ClsJavaStubByVirtualFileCache())
|
||||
@@ -157,16 +153,13 @@ public class StandaloneAnalysisAPISessionBuilder(
|
||||
PsiElementFinder.EP.getPoint(project).registerExtension(PsiElementFinderImpl(project))
|
||||
}
|
||||
|
||||
private fun registerPsiDeclarationFromBinaryModuleProvider(
|
||||
packagePartProvider: (GlobalSearchScope) -> PackagePartProvider,
|
||||
) {
|
||||
private fun registerPsiDeclarationFromBinaryModuleProvider() {
|
||||
val ktModuleProviderImpl = projectStructureProvider as KtModuleProviderImpl
|
||||
kotlinCoreProjectEnvironment.project.apply {
|
||||
registerService(
|
||||
KotlinPsiDeclarationProviderFactory::class.java,
|
||||
KotlinStaticPsiDeclarationProviderFactory(
|
||||
this,
|
||||
packagePartProvider,
|
||||
ktModuleProviderImpl.binaryModules,
|
||||
kotlinCoreProjectEnvironment.environment.jarFileSystem as CoreJarFileSystem
|
||||
)
|
||||
@@ -212,7 +205,7 @@ public class StandaloneAnalysisAPISessionBuilder(
|
||||
createPackagePartProvider,
|
||||
)
|
||||
if (withPsiDeclarationFromBinaryModuleProvider) {
|
||||
registerPsiDeclarationFromBinaryModuleProvider(createPackagePartProvider)
|
||||
registerPsiDeclarationFromBinaryModuleProvider()
|
||||
}
|
||||
|
||||
return StandaloneAnalysisAPISession(
|
||||
|
||||
+1
-5
@@ -165,11 +165,7 @@ internal fun configureProjectEnvironment(
|
||||
)
|
||||
project.picoContainer.registerComponentInstance(
|
||||
PackagePartProviderFactory::class.qualifiedName,
|
||||
object : PackagePartProviderFactory() {
|
||||
override fun createPackagePartProvider(scope: GlobalSearchScope): PackagePartProvider {
|
||||
return packagePartProvider(scope)
|
||||
}
|
||||
}
|
||||
KotlinStaticPackagePartProviderFactory(packagePartProvider)
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
-3
@@ -9,7 +9,6 @@ import com.intellij.mock.MockApplication
|
||||
import com.intellij.mock.MockProject
|
||||
import com.intellij.openapi.vfs.impl.jar.CoreJarFileSystem
|
||||
import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.KtStaticModuleProvider
|
||||
import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.StandaloneProjectFactory
|
||||
import org.jetbrains.kotlin.analysis.decompiled.light.classes.ClsJavaStubByVirtualFileCache
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtBinaryModule
|
||||
import org.jetbrains.kotlin.analysis.project.structure.ProjectStructureProvider
|
||||
@@ -29,14 +28,12 @@ object StandaloneModeTestServiceRegistrar : AnalysisApiTestServiceRegistrar() {
|
||||
(projectStructureProvider as? KtStaticModuleProvider)?.projectStructure?.allKtModules()?.filterIsInstance<KtBinaryModule>()
|
||||
?: emptyList()
|
||||
val projectEnvironment = testServices.environmentManager.getProjectEnvironment()
|
||||
val binaryRoots = StandaloneProjectFactory.getAllBinaryRoots(binaryModules, projectEnvironment)
|
||||
project.apply {
|
||||
registerService(ClsJavaStubByVirtualFileCache::class.java, ClsJavaStubByVirtualFileCache())
|
||||
registerService(
|
||||
KotlinPsiDeclarationProviderFactory::class.java,
|
||||
KotlinStaticPsiDeclarationProviderFactory(
|
||||
this,
|
||||
StandaloneProjectFactory.createPackagePartsProvider(project, binaryRoots),
|
||||
binaryModules,
|
||||
projectEnvironment.environment.jarFileSystem as CoreJarFileSystem
|
||||
)
|
||||
|
||||
+2
-2
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.analysis.decompiled.light.classes.ClsJavaStubByVirtu
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtBinaryModule
|
||||
import org.jetbrains.kotlin.analysis.providers.KotlinPsiDeclarationProvider
|
||||
import org.jetbrains.kotlin.analysis.providers.KotlinPsiDeclarationProviderFactory
|
||||
import org.jetbrains.kotlin.analysis.providers.createPackagePartProvider
|
||||
import org.jetbrains.kotlin.asJava.builder.ClsWrapperStubPsiFactory
|
||||
import org.jetbrains.kotlin.load.kotlin.PackagePartProvider
|
||||
import org.jetbrains.kotlin.name.CallableId
|
||||
@@ -111,7 +112,6 @@ private class KotlinStaticPsiDeclarationFromBinaryModuleProvider(
|
||||
// We need a session or facade that maintains such information
|
||||
class KotlinStaticPsiDeclarationProviderFactory(
|
||||
private val project: Project,
|
||||
private val createPackagePartProvider: (GlobalSearchScope) -> PackagePartProvider,
|
||||
private val binaryModules: Collection<KtBinaryModule>,
|
||||
private val jarFileSystem: CoreJarFileSystem,
|
||||
) : KotlinPsiDeclarationProviderFactory() {
|
||||
@@ -119,7 +119,7 @@ class KotlinStaticPsiDeclarationProviderFactory(
|
||||
return KotlinStaticPsiDeclarationFromBinaryModuleProvider(
|
||||
project,
|
||||
searchScope,
|
||||
createPackagePartProvider.invoke(searchScope),
|
||||
project.createPackagePartProvider(searchScope),
|
||||
binaryModules,
|
||||
jarFileSystem,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user