From 51c04b624f09513b14e09ba3275405205e50cbe0 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Mon, 15 May 2023 15:38:05 +0200 Subject: [PATCH] [Analysis API] optimize KtFirPackageScope.getPossibleClassifierNames Previously, we did the kotlin subclasses name search two times: - via `KotlinDeclarationProvider` - via `JavaElementFinder` which is redundant and slows down the searching --- .../analysis/api/fir/scopes/KtFirPackageScope.kt | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) 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 ed6466ebd84..4da668b0043 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,7 +5,6 @@ package org.jetbrains.kotlin.analysis.api.fir.scopes -import com.intellij.psi.JavaPsiFacade import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion @@ -15,12 +14,14 @@ 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.impl.forEachNonKotlinPsiElementFinder 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.jvm.isJvm internal class KtFirPackageScope( private val fqName: FqName, @@ -46,10 +47,15 @@ internal class KtFirPackageScope( hashSetOf().apply { addAll(analysisSession.useSiteScopeDeclarationProvider.getTopLevelKotlinClassLikeDeclarationNamesInPackage(fqName)) - JavaPsiFacade.getInstance(analysisSession.project) - .findPackage(fqName.asString()) - ?.getClasses(analysisSession.useSiteAnalysisScope) - ?.mapNotNullTo(this) { it.name?.let(Name::identifier) } + when { + analysisSession.targetPlatform.isJvm() -> { + forEachNonKotlinPsiElementFinder(analysisSession.project) { finder -> + finder.findPackage(fqName.asString()) + ?.getClasses(analysisSession.useSiteAnalysisScope) + ?.mapNotNullTo(this) { it.name?.let(Name::identifier) } + } + } + } addAll(collectGeneratedTopLevelClassifiers()) }