From bb37a959d4061a243a17b962240a5813e727cd92 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Tue, 9 May 2023 17:08:04 +0900 Subject: [PATCH] [LL API] Move composite declaration provider to be used in IntelliJ --- .../analysis/api/fir/KtFirAnalysisSession.kt | 2 +- .../CompositeKotlinDeclarationProvider.kt | 12 ++++---- .../impl}/EmptyKotlinDeclarationProvider.kt | 30 +++++++++---------- .../api/fir/providers/LLFirProviderHelper.kt | 2 +- .../api/fir/sessions/LLFirSessionCache.kt | 1 + 5 files changed, 23 insertions(+), 24 deletions(-) rename analysis/{low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure => analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/impl}/CompositeKotlinDeclarationProvider.kt (90%) rename analysis/{low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure => analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/impl}/EmptyKotlinDeclarationProvider.kt (51%) diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtFirAnalysisSession.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtFirAnalysisSession.kt index f68673f50cf..a29b494c1fd 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtFirAnalysisSession.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtFirAnalysisSession.kt @@ -18,7 +18,6 @@ import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LowLevelFirApiFacadeForResolveOnAir -import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.CompositeKotlinDeclarationProvider import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.CompositeKotlinPackageProvider import org.jetbrains.kotlin.analysis.low.level.api.fir.resolve.extensions.LLFirResolveExtensionTool import org.jetbrains.kotlin.analysis.low.level.api.fir.resolve.extensions.llResolveExtensionTool @@ -28,6 +27,7 @@ import org.jetbrains.kotlin.analysis.providers.KotlinDeclarationProvider import org.jetbrains.kotlin.analysis.providers.KotlinPackageProvider import org.jetbrains.kotlin.analysis.providers.createDeclarationProvider import org.jetbrains.kotlin.analysis.providers.createPackageProvider +import org.jetbrains.kotlin.analysis.providers.impl.CompositeKotlinDeclarationProvider import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.moduleData import org.jetbrains.kotlin.fir.resolve.ScopeSession diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/CompositeKotlinDeclarationProvider.kt b/analysis/analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/impl/CompositeKotlinDeclarationProvider.kt similarity index 90% rename from analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/CompositeKotlinDeclarationProvider.kt rename to analysis/analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/impl/CompositeKotlinDeclarationProvider.kt index 3446921147d..f39f059fd13 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/CompositeKotlinDeclarationProvider.kt +++ b/analysis/analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/impl/CompositeKotlinDeclarationProvider.kt @@ -3,7 +3,7 @@ * 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.low.level.api.fir.project.structure +package org.jetbrains.kotlin.analysis.providers.impl import org.jetbrains.kotlin.analysis.providers.KotlinDeclarationProvider import org.jetbrains.kotlin.name.CallableId @@ -12,11 +12,9 @@ import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* -class CompositeKotlinDeclarationProvider -private constructor( +public class CompositeKotlinDeclarationProvider private constructor( private val providers: List ) : KotlinDeclarationProvider() { - override fun getClassLikeDeclarationByClassId(classId: ClassId): KtClassLikeDeclaration? { return providers.firstNotNullOfOrNull { it.getClassLikeDeclarationByClassId(classId) } } @@ -65,12 +63,12 @@ private constructor( return providers.flatMapTo(mutableListOf()) { it.findFilesForScript(scriptFqName) } } - override fun computePackageSetWithTopLevelCallableDeclarations(): Set { + override fun computePackageSetWithTopLevelCallableDeclarations(): Set { return providers.flatMapTo(mutableSetOf()) { it.computePackageSetWithTopLevelCallableDeclarations() } } - companion object { - fun create(providers: List): KotlinDeclarationProvider { + public companion object { + public fun create(providers: List): KotlinDeclarationProvider { return when (providers.size) { 0 -> EmptyKotlinDeclarationProvider 1 -> providers.single() diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/EmptyKotlinDeclarationProvider.kt b/analysis/analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/impl/EmptyKotlinDeclarationProvider.kt similarity index 51% rename from analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/EmptyKotlinDeclarationProvider.kt rename to analysis/analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/impl/EmptyKotlinDeclarationProvider.kt index 043790c86fb..16ee174d128 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/EmptyKotlinDeclarationProvider.kt +++ b/analysis/analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/impl/EmptyKotlinDeclarationProvider.kt @@ -3,7 +3,7 @@ * 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.low.level.api.fir.project.structure +package org.jetbrains.kotlin.analysis.providers.impl import org.jetbrains.kotlin.analysis.providers.KotlinDeclarationProvider import org.jetbrains.kotlin.name.CallableId @@ -12,18 +12,18 @@ import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* -internal object EmptyKotlinDeclarationProvider : KotlinDeclarationProvider() { - override fun getClassLikeDeclarationByClassId(classId: ClassId) = null - override fun getAllClassesByClassId(classId: ClassId) = emptyList() - override fun getAllTypeAliasesByClassId(classId: ClassId) = emptyList() - override fun getTopLevelKotlinClassLikeDeclarationNamesInPackage(packageFqName: FqName) = emptySet() - override fun getTopLevelProperties(callableId: CallableId) = emptyList() - override fun getTopLevelFunctions(callableId: CallableId) = emptyList() - override fun getTopLevelCallableFiles(callableId: CallableId) = emptyList() - override fun getTopLevelCallableNamesInPackage(packageFqName: FqName) = emptySet() - override fun findFilesForFacadeByPackage(packageFqName: FqName) = emptyList() - override fun findFilesForFacade(facadeFqName: FqName) = emptyList() - override fun findInternalFilesForFacade(facadeFqName: FqName) = emptyList() - override fun findFilesForScript(scriptFqName: FqName) = emptyList() +public object EmptyKotlinDeclarationProvider : KotlinDeclarationProvider() { + override fun getClassLikeDeclarationByClassId(classId: ClassId): KtClassLikeDeclaration? = null + override fun getAllClassesByClassId(classId: ClassId): List = emptyList() + override fun getAllTypeAliasesByClassId(classId: ClassId): List = emptyList() + override fun getTopLevelKotlinClassLikeDeclarationNamesInPackage(packageFqName: FqName): Set = emptySet() + override fun getTopLevelProperties(callableId: CallableId): List = emptyList() + override fun getTopLevelFunctions(callableId: CallableId): List = emptyList() + override fun getTopLevelCallableFiles(callableId: CallableId): List = emptyList() + override fun getTopLevelCallableNamesInPackage(packageFqName: FqName): Set = emptySet() + override fun findFilesForFacadeByPackage(packageFqName: FqName): List = emptyList() + override fun findFilesForFacade(facadeFqName: FqName): List = emptyList() + override fun findInternalFilesForFacade(facadeFqName: FqName): List = emptyList() + override fun findFilesForScript(scriptFqName: FqName): List = emptyList() override fun computePackageSetWithTopLevelCallableDeclarations(): Set = emptySet() -} +} \ No newline at end of file diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/providers/LLFirProviderHelper.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/providers/LLFirProviderHelper.kt index f950c13b4b1..63d6990a518 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/providers/LLFirProviderHelper.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/providers/LLFirProviderHelper.kt @@ -6,7 +6,6 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.providers import org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.LLFirFileBuilder -import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.CompositeKotlinDeclarationProvider import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.CompositeKotlinPackageProvider import org.jetbrains.kotlin.analysis.low.level.api.fir.resolve.extensions.LLFirResolveExtensionTool import org.jetbrains.kotlin.analysis.low.level.api.fir.resolve.extensions.llResolveExtensionTool @@ -15,6 +14,7 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.util.LLFirCompositeSymbol import org.jetbrains.kotlin.analysis.low.level.api.fir.util.LLFirKotlinSymbolProviderNameCache import org.jetbrains.kotlin.analysis.providers.KotlinDeclarationProvider import org.jetbrains.kotlin.analysis.providers.KotlinPackageProvider +import org.jetbrains.kotlin.analysis.providers.impl.CompositeKotlinDeclarationProvider import org.jetbrains.kotlin.builtins.StandardNames import org.jetbrains.kotlin.config.AnalysisFlags import org.jetbrains.kotlin.fir.FirSession diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionCache.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionCache.kt index ad13cef84e9..e7db66d079c 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionCache.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionCache.kt @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.analysis.project.structure.* import org.jetbrains.kotlin.analysis.providers.createAnnotationResolver import org.jetbrains.kotlin.analysis.providers.createDeclarationProvider import org.jetbrains.kotlin.analysis.providers.createPackageProvider +import org.jetbrains.kotlin.analysis.providers.impl.EmptyKotlinDeclarationProvider import org.jetbrains.kotlin.analysis.providers.impl.FileBasedKotlinDeclarationProvider import org.jetbrains.kotlin.analysis.utils.trackers.CompositeModificationTracker import org.jetbrains.kotlin.config.LanguageFeature