From d6e9b8b003be6c80f095c3b4acd0381e901ea1de Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Tue, 25 Apr 2023 18:59:36 +0200 Subject: [PATCH] [Analysis API] reduce memory consumption by KtFirPackageScope --- .../api/fir/components/KtFirScopeProvider.kt | 10 +----- .../api/fir/scopes/KtFirPackageScope.kt | 34 +++++++------------ 2 files changed, 13 insertions(+), 31 deletions(-) diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirScopeProvider.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirScopeProvider.kt index 1b0b6196eec..ecbe73edbb0 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirScopeProvider.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirScopeProvider.kt @@ -246,15 +246,7 @@ internal class KtFirScopeProvider( } private fun createPackageScope(fqName: FqName): KtFirPackageScope { - return KtFirPackageScope( - fqName, - project, - builder, - analysisSession.useSiteAnalysisScope, - analysisSession.useSiteScopeDeclarationProvider, - analysisSession.useSitePackageProvider, - analysisSession.targetPlatform - ) + return KtFirPackageScope(fqName, analysisSession) } private fun convertToKtTypeScope(firScope: FirScope): KtTypeScope { diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/scopes/KtFirPackageScope.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/scopes/KtFirPackageScope.kt index fff35d06331..347ca2ff257 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/scopes/KtFirPackageScope.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/scopes/KtFirPackageScope.kt @@ -5,10 +5,8 @@ package org.jetbrains.kotlin.analysis.api.fir.scopes -import com.intellij.openapi.project.Project import com.intellij.psi.JavaPsiFacade -import com.intellij.psi.search.GlobalSearchScope -import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder +import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion import org.jetbrains.kotlin.analysis.api.scopes.KtScope @@ -17,29 +15,21 @@ import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtClassifierSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtConstructorSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtPackageSymbol -import org.jetbrains.kotlin.analysis.providers.KotlinDeclarationProvider -import org.jetbrains.kotlin.analysis.providers.KotlinPackageProvider import org.jetbrains.kotlin.fir.extensions.FirExtensionService import org.jetbrains.kotlin.fir.extensions.declarationGenerators import org.jetbrains.kotlin.fir.extensions.extensionService import org.jetbrains.kotlin.fir.scopes.impl.FirPackageMemberScope import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.platform.TargetPlatform internal class KtFirPackageScope( private val fqName: FqName, - private val project: Project, - private val builder: KtSymbolByFirBuilder, - private val searchScope: GlobalSearchScope, - private val declarationProvider: KotlinDeclarationProvider, - private val packageProvider: KotlinPackageProvider, - private val targetPlatform: TargetPlatform, + private val analysisSession: KtFirAnalysisSession, ) : KtScope { - override val token: KtLifetimeToken get() = builder.token + override val token: KtLifetimeToken get() = analysisSession.token private val firScope: FirPackageMemberScope by lazy(LazyThreadSafetyMode.PUBLICATION) { - FirPackageMemberScope(fqName, builder.rootSession) + FirPackageMemberScope(fqName, analysisSession.useSiteSession) } private val firExtensionService: FirExtensionService @@ -47,18 +37,18 @@ internal class KtFirPackageScope( override fun getPossibleCallableNames(): Set = withValidityAssertion { hashSetOf().apply { - addAll(declarationProvider.getTopLevelCallableNamesInPackage(fqName)) + addAll(analysisSession.useSiteScopeDeclarationProvider.getTopLevelCallableNamesInPackage(fqName)) addAll(collectGeneratedTopLevelCallables()) } } override fun getPossibleClassifierNames(): Set = withValidityAssertion { hashSetOf().apply { - addAll(declarationProvider.getTopLevelKotlinClassLikeDeclarationNamesInPackage(fqName)) + addAll(analysisSession.useSiteScopeDeclarationProvider.getTopLevelKotlinClassLikeDeclarationNamesInPackage(fqName)) - JavaPsiFacade.getInstance(project) + JavaPsiFacade.getInstance(analysisSession.project) .findPackage(fqName.asString()) - ?.getClasses(searchScope) + ?.getClasses(analysisSession.useSiteAnalysisScope) ?.mapNotNullTo(this) { it.name?.let(Name::identifier) } addAll(collectGeneratedTopLevelClassifiers()) @@ -96,11 +86,11 @@ internal class KtFirPackageScope( } override fun getCallableSymbols(nameFilter: KtScopeNameFilter): Sequence = withValidityAssertion { - firScope.getCallableSymbols(getPossibleCallableNames().filter(nameFilter), builder) + firScope.getCallableSymbols(getPossibleCallableNames().filter(nameFilter), analysisSession.firSymbolBuilder) } override fun getClassifierSymbols(nameFilter: KtScopeNameFilter): Sequence = withValidityAssertion { - firScope.getClassifierSymbols(getPossibleClassifierNames().filter(nameFilter), builder) + firScope.getClassifierSymbols(getPossibleClassifierNames().filter(nameFilter), analysisSession.firSymbolBuilder) } override fun getConstructors(): Sequence = withValidityAssertion { @@ -109,8 +99,8 @@ internal class KtFirPackageScope( override fun getPackageSymbols(nameFilter: KtScopeNameFilter): Sequence = withValidityAssertion { sequence { - packageProvider.getSubPackageFqNames(fqName, targetPlatform, nameFilter).forEach { - yield(builder.createPackageSymbol(fqName.child(it))) + analysisSession.useSitePackageProvider.getSubPackageFqNames(fqName, analysisSession.targetPlatform, nameFilter).forEach { + yield(analysisSession.firSymbolBuilder.createPackageSymbol(fqName.child(it))) } } }