diff --git a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/common/CommonResolverForModuleFactory.kt b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/common/CommonResolverForModuleFactory.kt index dae8d5d6c43..cb976ee52d0 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/common/CommonResolverForModuleFactory.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/common/CommonResolverForModuleFactory.kt @@ -47,9 +47,11 @@ import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactoryService import org.jetbrains.kotlin.serialization.deserialization.MetadataPackageFragmentProvider import org.jetbrains.kotlin.serialization.deserialization.MetadataPartProvider +import org.jetbrains.kotlin.storage.StorageManager class CommonAnalysisParameters( - val metadataPartProviderFactory: (ModuleContent<*>) -> MetadataPartProvider + val metadataPartProviderFactory: (ModuleContent<*>) -> MetadataPartProvider, + val klibMetadataPackageFragmentProviderFactory: KlibMetadataPackageFragmentProviderFactory? = null, ) : PlatformAnalysisParameters /** @@ -105,12 +107,18 @@ class CommonResolverForModuleFactory( languageVersionSettings, targetPlatform, CommonPlatformAnalyzerServices, shouldCheckExpectActual ) + val klibMetadataPackageFragmentProvider = + platformParameters.klibMetadataPackageFragmentProviderFactory?.createPackageFragmentProvider( + PackageFragmentProviderCreationContext(moduleInfo, moduleContext.storageManager, languageVersionSettings, moduleDescriptor) + ) + val packageFragmentProviders = /** If this is a dependency module that [commonDependenciesContainer] knows about, get the package fragments from there */ commonDependenciesContainer?.packageFragmentProviderForModuleInfo(moduleInfo)?.let(::listOf) - ?: listOf( + ?: listOfNotNull( container.get().packageFragmentProvider, - container.get() + container.get(), + klibMetadataPackageFragmentProvider, ) return ResolverForModule( @@ -154,7 +162,7 @@ class CommonResolverForModuleFactory( ) val projectContext = ProjectContext(project, "metadata serializer") - @Suppress("NAME_SHADOWING") + val resolver = ResolverForSingleModuleProject( "sources for metadata serializer", projectContext, @@ -210,6 +218,19 @@ interface CommonDependenciesContainer { val refinesModuleInfos: List } +fun interface KlibMetadataPackageFragmentProviderFactory { + fun createPackageFragmentProvider( + context: PackageFragmentProviderCreationContext + ): PackageFragmentProvider? +} + +class PackageFragmentProviderCreationContext( + val moduleInfo: ModuleInfo, + val storageManager: StorageManager, + val languageVersionSettings: LanguageVersionSettings, + val moduleDescriptor: ModuleDescriptor, +) + private fun createContainerToResolveCommonCode( moduleContext: ModuleContext, bindingTrace: BindingTrace,