Add PackageAndMetadataPartProvider interface

Use it for parameter in MetadataSymbolProvider
This commit is contained in:
Ivan Kochurkin
2023-01-24 20:07:07 +01:00
committed by Space Team
parent f3e3cc0037
commit a9bac2f18b
5 changed files with 22 additions and 15 deletions
@@ -37,6 +37,7 @@ import org.jetbrains.kotlin.fir.session.IncrementalCompilationContext
import org.jetbrains.kotlin.fir.session.environment.AbstractProjectEnvironment import org.jetbrains.kotlin.fir.session.environment.AbstractProjectEnvironment
import org.jetbrains.kotlin.fir.session.environment.AbstractProjectFileSearchScope import org.jetbrains.kotlin.fir.session.environment.AbstractProjectFileSearchScope
import org.jetbrains.kotlin.javac.JavacWrapper import org.jetbrains.kotlin.javac.JavacWrapper
import org.jetbrains.kotlin.load.kotlin.PackageAndMetadataPartProvider
import org.jetbrains.kotlin.load.kotlin.incremental.IncrementalPackagePartProvider import org.jetbrains.kotlin.load.kotlin.incremental.IncrementalPackagePartProvider
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCompilationComponents import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCompilationComponents
import org.jetbrains.kotlin.modules.JavaRootPath import org.jetbrains.kotlin.modules.JavaRootPath
@@ -264,7 +265,7 @@ fun createFirLibraryListAndSession(
libraryList.moduleDataProvider, libraryList.moduleDataProvider,
projectEnvironment, projectEnvironment,
scope, scope,
projectEnvironment.getPackagePartProvider(librariesScope), projectEnvironment.getPackagePartProvider(librariesScope) as PackageAndMetadataPartProvider,
configuration.languageVersionSettings, configuration.languageVersionSettings,
registerExtraComponents = {}, registerExtraComponents = {},
) )
@@ -28,7 +28,7 @@ import org.jetbrains.kotlin.fir.session.environment.AbstractProjectEnvironment
import org.jetbrains.kotlin.fir.session.environment.AbstractProjectFileSearchScope import org.jetbrains.kotlin.fir.session.environment.AbstractProjectFileSearchScope
import org.jetbrains.kotlin.incremental.components.EnumWhenTracker import org.jetbrains.kotlin.incremental.components.EnumWhenTracker
import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.load.kotlin.PackagePartProvider import org.jetbrains.kotlin.load.kotlin.PackageAndMetadataPartProvider
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.serialization.deserialization.KotlinMetadataFinder import org.jetbrains.kotlin.serialization.deserialization.KotlinMetadataFinder
@@ -39,7 +39,7 @@ object FirCommonSessionFactory : FirAbstractSessionFactory() {
moduleDataProvider: ModuleDataProvider, moduleDataProvider: ModuleDataProvider,
projectEnvironment: AbstractProjectEnvironment, projectEnvironment: AbstractProjectEnvironment,
scope: AbstractProjectFileSearchScope, scope: AbstractProjectFileSearchScope,
packagePartProvider: PackagePartProvider, packageAndMetadataPartProvider: PackageAndMetadataPartProvider,
languageVersionSettings: LanguageVersionSettings, languageVersionSettings: LanguageVersionSettings,
registerExtraComponents: ((FirSession) -> Unit), registerExtraComponents: ((FirSession) -> Unit),
): FirSession { ): FirSession {
@@ -59,12 +59,12 @@ object FirCommonSessionFactory : FirAbstractSessionFactory() {
session, session,
moduleDataProvider, moduleDataProvider,
kotlinScopeProvider, kotlinScopeProvider,
packagePartProvider, packageAndMetadataPartProvider,
projectEnvironment.getKotlinClassFinder(scope) projectEnvironment.getKotlinClassFinder(scope)
), ),
FirBuiltinSymbolProvider(session, builtinsModuleData, kotlinScopeProvider), FirBuiltinSymbolProvider(session, builtinsModuleData, kotlinScopeProvider),
FirCloneableSymbolProvider(session, builtinsModuleData, kotlinScopeProvider), FirCloneableSymbolProvider(session, builtinsModuleData, kotlinScopeProvider),
OptionalAnnotationClassesProvider(session, moduleDataProvider, kotlinScopeProvider, packagePartProvider) OptionalAnnotationClassesProvider(session, moduleDataProvider, kotlinScopeProvider, packageAndMetadataPartProvider)
) )
} }
) )
@@ -116,7 +116,7 @@ object FirCommonSessionFactory : FirAbstractSessionFactory() {
session, session,
moduleDataProvider, moduleDataProvider,
kotlinScopeProvider, kotlinScopeProvider,
precompiledBinariesPackagePartProvider, precompiledBinariesPackagePartProvider as PackageAndMetadataPartProvider,
projectEnvironment.getKotlinClassFinder(it.precompiledBinariesFileScope) as KotlinMetadataFinder, projectEnvironment.getKotlinClassFinder(it.precompiledBinariesFileScope) as KotlinMetadataFinder,
defaultDeserializationOrigin = FirDeclarationOrigin.Precompiled defaultDeserializationOrigin = FirDeclarationOrigin.Precompiled
) )
@@ -10,14 +10,13 @@ import org.jetbrains.kotlin.fir.ThreadSafeMutableState
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.deserialization.* import org.jetbrains.kotlin.fir.deserialization.*
import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider
import org.jetbrains.kotlin.load.kotlin.PackagePartProvider import org.jetbrains.kotlin.load.kotlin.PackageAndMetadataPartProvider
import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.metadata.ProtoBuf
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.serialization.deserialization.KotlinMetadataFinder import org.jetbrains.kotlin.serialization.deserialization.KotlinMetadataFinder
import org.jetbrains.kotlin.serialization.deserialization.MetadataClassDataFinder import org.jetbrains.kotlin.serialization.deserialization.MetadataClassDataFinder
import org.jetbrains.kotlin.serialization.deserialization.MetadataPartProvider
import org.jetbrains.kotlin.serialization.deserialization.builtins.BuiltInSerializerProtocol import org.jetbrains.kotlin.serialization.deserialization.builtins.BuiltInSerializerProtocol
import org.jetbrains.kotlin.serialization.deserialization.readProto import org.jetbrains.kotlin.serialization.deserialization.readProto
@@ -26,14 +25,12 @@ class MetadataSymbolProvider(
session: FirSession, session: FirSession,
moduleDataProvider: ModuleDataProvider, moduleDataProvider: ModuleDataProvider,
kotlinScopeProvider: FirKotlinScopeProvider, kotlinScopeProvider: FirKotlinScopeProvider,
private val packagePartProvider: PackagePartProvider, private val packageAndMetadataPartProvider: PackageAndMetadataPartProvider,
private val kotlinClassFinder: KotlinMetadataFinder, private val kotlinClassFinder: KotlinMetadataFinder,
defaultDeserializationOrigin: FirDeclarationOrigin = FirDeclarationOrigin.Library defaultDeserializationOrigin: FirDeclarationOrigin = FirDeclarationOrigin.Library
) : AbstractFirDeserializedSymbolProvider( ) : AbstractFirDeserializedSymbolProvider(
session, moduleDataProvider, kotlinScopeProvider, defaultDeserializationOrigin, BuiltInSerializerProtocol session, moduleDataProvider, kotlinScopeProvider, defaultDeserializationOrigin, BuiltInSerializerProtocol
) { ) {
private val metadataPartProvider = packagePartProvider as MetadataPartProvider
private val classDataFinder = MetadataClassDataFinder(kotlinClassFinder) private val classDataFinder = MetadataClassDataFinder(kotlinClassFinder)
private val annotationDeserializer = FirBuiltinAnnotationDeserializer(session) private val annotationDeserializer = FirBuiltinAnnotationDeserializer(session)
@@ -41,7 +38,7 @@ class MetadataSymbolProvider(
private val constDeserializer = FirConstDeserializer(session, BuiltInSerializerProtocol) private val constDeserializer = FirConstDeserializer(session, BuiltInSerializerProtocol)
override fun computePackagePartsInfos(packageFqName: FqName): List<PackagePartsCacheData> { override fun computePackagePartsInfos(packageFqName: FqName): List<PackagePartsCacheData> {
return metadataPartProvider.findMetadataPackageParts(packageFqName.asString()).mapNotNull { partName -> return packageAndMetadataPartProvider.findMetadataPackageParts(packageFqName.asString()).mapNotNull { partName ->
if (partName in KotlinBuiltins) return@mapNotNull null if (partName in KotlinBuiltins) return@mapNotNull null
val classId = ClassId(packageFqName, Name.identifier(partName)) val classId = ClassId(packageFqName, Name.identifier(partName))
@@ -62,7 +59,7 @@ class MetadataSymbolProvider(
} }
} }
override fun computePackageSetWithNonClassDeclarations() = packagePartProvider.computePackageSetWithNonClassDeclarations() override fun computePackageSetWithNonClassDeclarations() = packageAndMetadataPartProvider.computePackageSetWithNonClassDeclarations()
override fun knownTopLevelClassesInPackage(packageFqName: FqName) = kotlinClassFinder.findMetadataTopLevelClassesInPackage(packageFqName) override fun knownTopLevelClassesInPackage(packageFqName: FqName) = kotlinClassFinder.findMetadataTopLevelClassesInPackage(packageFqName)
@@ -11,9 +11,8 @@ import org.jetbrains.kotlin.metadata.jvm.deserialization.PackageParts
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.serialization.deserialization.ClassData import org.jetbrains.kotlin.serialization.deserialization.ClassData
import org.jetbrains.kotlin.serialization.deserialization.DeserializationConfiguration import org.jetbrains.kotlin.serialization.deserialization.DeserializationConfiguration
import org.jetbrains.kotlin.serialization.deserialization.MetadataPartProvider
abstract class JvmPackagePartProviderBase<MappingsKey> : PackagePartProvider, MetadataPartProvider { abstract class JvmPackagePartProviderBase<MappingsKey> : PackageAndMetadataPartProvider {
protected data class ModuleMappingInfo<MappingsKey>(val key: MappingsKey, val mapping: ModuleMapping, val name: String) protected data class ModuleMappingInfo<MappingsKey>(val key: MappingsKey, val mapping: ModuleMapping, val name: String)
@@ -0,0 +1,10 @@
/*
* Copyright 2010-2023 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.load.kotlin
import org.jetbrains.kotlin.serialization.deserialization.MetadataPartProvider
interface PackageAndMetadataPartProvider : PackagePartProvider, MetadataPartProvider