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.AbstractProjectFileSearchScope
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.components.IncrementalCompilationComponents
import org.jetbrains.kotlin.modules.JavaRootPath
@@ -264,7 +265,7 @@ fun createFirLibraryListAndSession(
libraryList.moduleDataProvider,
projectEnvironment,
scope,
projectEnvironment.getPackagePartProvider(librariesScope),
projectEnvironment.getPackagePartProvider(librariesScope) as PackageAndMetadataPartProvider,
configuration.languageVersionSettings,
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.incremental.components.EnumWhenTracker
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.serialization.deserialization.KotlinMetadataFinder
@@ -39,7 +39,7 @@ object FirCommonSessionFactory : FirAbstractSessionFactory() {
moduleDataProvider: ModuleDataProvider,
projectEnvironment: AbstractProjectEnvironment,
scope: AbstractProjectFileSearchScope,
packagePartProvider: PackagePartProvider,
packageAndMetadataPartProvider: PackageAndMetadataPartProvider,
languageVersionSettings: LanguageVersionSettings,
registerExtraComponents: ((FirSession) -> Unit),
): FirSession {
@@ -59,12 +59,12 @@ object FirCommonSessionFactory : FirAbstractSessionFactory() {
session,
moduleDataProvider,
kotlinScopeProvider,
packagePartProvider,
packageAndMetadataPartProvider,
projectEnvironment.getKotlinClassFinder(scope)
),
FirBuiltinSymbolProvider(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,
moduleDataProvider,
kotlinScopeProvider,
precompiledBinariesPackagePartProvider,
precompiledBinariesPackagePartProvider as PackageAndMetadataPartProvider,
projectEnvironment.getKotlinClassFinder(it.precompiledBinariesFileScope) as KotlinMetadataFinder,
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.deserialization.*
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.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.serialization.deserialization.KotlinMetadataFinder
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.readProto
@@ -26,14 +25,12 @@ class MetadataSymbolProvider(
session: FirSession,
moduleDataProvider: ModuleDataProvider,
kotlinScopeProvider: FirKotlinScopeProvider,
private val packagePartProvider: PackagePartProvider,
private val packageAndMetadataPartProvider: PackageAndMetadataPartProvider,
private val kotlinClassFinder: KotlinMetadataFinder,
defaultDeserializationOrigin: FirDeclarationOrigin = FirDeclarationOrigin.Library
) : AbstractFirDeserializedSymbolProvider(
session, moduleDataProvider, kotlinScopeProvider, defaultDeserializationOrigin, BuiltInSerializerProtocol
) {
private val metadataPartProvider = packagePartProvider as MetadataPartProvider
private val classDataFinder = MetadataClassDataFinder(kotlinClassFinder)
private val annotationDeserializer = FirBuiltinAnnotationDeserializer(session)
@@ -41,7 +38,7 @@ class MetadataSymbolProvider(
private val constDeserializer = FirConstDeserializer(session, BuiltInSerializerProtocol)
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
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)
@@ -11,9 +11,8 @@ import org.jetbrains.kotlin.metadata.jvm.deserialization.PackageParts
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.serialization.deserialization.ClassData
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)
@@ -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