[FIR] Store mapped jvm declarations in session component, share it between MPP modules

^KT-61640 Fixed

This change doesn't affect any tests in the moment, because it's part of
  bigger refactoring of proper storing IR declarations during FIR2IR
  conversion (KT-61637)

Without this change, there is one test break in branch for KT-61637:
- FirPsiBlackBoxCodegenTestGenerated.Multiplatform.K2.testJavaMethodWithTypeParameter
This commit is contained in:
Dmitriy Novozhilov
2023-09-01 15:35:55 +03:00
committed by Space Team
parent bb36beb364
commit fa4c6d55c1
5 changed files with 95 additions and 71 deletions
@@ -16,7 +16,6 @@ import org.jetbrains.kotlin.fir.analysis.checkers.OptInLanguageVersionSettingsCh
import org.jetbrains.kotlin.fir.checkers.registerExtendedCommonCheckers import org.jetbrains.kotlin.fir.checkers.registerExtendedCommonCheckers
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider
import org.jetbrains.kotlin.fir.java.enhancement.FirEnhancedSymbolsStorage
import org.jetbrains.kotlin.fir.session.* import org.jetbrains.kotlin.fir.session.*
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
@@ -30,7 +29,6 @@ import org.jetbrains.kotlin.load.kotlin.PackageAndMetadataPartProvider
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.platform.CommonPlatforms import org.jetbrains.kotlin.platform.CommonPlatforms
import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.platform.isCommon
import org.jetbrains.kotlin.platform.js.JsPlatforms import org.jetbrains.kotlin.platform.js.JsPlatforms
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
import org.jetbrains.kotlin.platform.konan.NativePlatforms import org.jetbrains.kotlin.platform.konan.NativePlatforms
@@ -73,7 +71,7 @@ fun <F> prepareJvmSessions(
createProviderAndScopeForIncrementalCompilation: (List<F>) -> IncrementalCompilationContext?, createProviderAndScopeForIncrementalCompilation: (List<F>) -> IncrementalCompilationContext?,
): List<SessionWithSources<F>> { ): List<SessionWithSources<F>> {
val javaSourcesScope = projectEnvironment.getSearchScopeForProjectJavaSources() val javaSourcesScope = projectEnvironment.getSearchScopeForProjectJavaSources()
val enhancementSymbolsStorage = FirEnhancedSymbolsStorage(firCachesFactoryForCliMode) val predefinedJavaComponents = FirSharableJavaComponents(firCachesFactoryForCliMode)
return prepareSessions( return prepareSessions(
files, configuration, rootModuleName, JvmPlatforms.unspecifiedJvmPlatform, files, configuration, rootModuleName, JvmPlatforms.unspecifiedJvmPlatform,
JvmPlatformAnalyzerServices, metadataCompilationMode = false, libraryList, isCommonSource, fileBelongsToModule, JvmPlatformAnalyzerServices, metadataCompilationMode = false, libraryList, isCommonSource, fileBelongsToModule,
@@ -87,7 +85,7 @@ fun <F> prepareJvmSessions(
librariesScope, librariesScope,
projectEnvironment.getPackagePartProvider(librariesScope), projectEnvironment.getPackagePartProvider(librariesScope),
configuration.languageVersionSettings, configuration.languageVersionSettings,
predefinedEnhancementStorage = enhancementSymbolsStorage, predefinedJavaComponents = predefinedJavaComponents,
registerExtraComponents = {}, registerExtraComponents = {},
) )
} }
@@ -103,7 +101,7 @@ fun <F> prepareJvmSessions(
configuration.get(CommonConfigurationKeys.LOOKUP_TRACKER), configuration.get(CommonConfigurationKeys.LOOKUP_TRACKER),
configuration.get(CommonConfigurationKeys.ENUM_WHEN_TRACKER), configuration.get(CommonConfigurationKeys.ENUM_WHEN_TRACKER),
configuration.get(CommonConfigurationKeys.IMPORT_TRACKER), configuration.get(CommonConfigurationKeys.IMPORT_TRACKER),
predefinedEnhancementStorage = enhancementSymbolsStorage, predefinedJavaComponents = predefinedJavaComponents,
needRegisterJavaElementFinder = true, needRegisterJavaElementFinder = true,
registerExtraComponents = {}, registerExtraComponents = {},
sessionConfigurator, sessionConfigurator,
@@ -49,6 +49,7 @@ import org.jetbrains.kotlin.fir.scopes.FirOverrideService
import org.jetbrains.kotlin.fir.scopes.FirPlatformClassMapper import org.jetbrains.kotlin.fir.scopes.FirPlatformClassMapper
import org.jetbrains.kotlin.fir.scopes.PlatformSpecificOverridabilityRules import org.jetbrains.kotlin.fir.scopes.PlatformSpecificOverridabilityRules
import org.jetbrains.kotlin.fir.scopes.impl.* import org.jetbrains.kotlin.fir.scopes.impl.*
import org.jetbrains.kotlin.fir.scopes.jvm.JvmMappedScope.FirMappedSymbolStorage
import org.jetbrains.kotlin.fir.serialization.FirProvidedDeclarationsForMetadataService import org.jetbrains.kotlin.fir.serialization.FirProvidedDeclarationsForMetadataService
import org.jetbrains.kotlin.fir.symbols.FirLazyDeclarationResolver import org.jetbrains.kotlin.fir.symbols.FirLazyDeclarationResolver
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
@@ -104,14 +105,25 @@ fun FirSession.registerCliCompilerOnlyComponents() {
register(FirPredicateBasedProvider::class, FirPredicateBasedProviderImpl(this)) register(FirPredicateBasedProvider::class, FirPredicateBasedProviderImpl(this))
} }
class FirSharableJavaComponents(
val enhancementStorage: FirEnhancedSymbolsStorage,
val mappedStorage: FirMappedSymbolStorage
) {
constructor(cachesFactory: FirCachesFactory) : this(
FirEnhancedSymbolsStorage(cachesFactory),
FirMappedSymbolStorage(cachesFactory)
)
}
@OptIn(SessionConfiguration::class) @OptIn(SessionConfiguration::class)
fun FirSession.registerCommonJavaComponents( fun FirSession.registerCommonJavaComponents(
javaModuleResolver: JavaModuleResolver, javaModuleResolver: JavaModuleResolver,
predefinedEnhancementStorage: FirEnhancedSymbolsStorage? = null, predefinedComponents: FirSharableJavaComponents? = null,
) { ) {
val jsr305State = languageVersionSettings.getFlag(JvmAnalysisFlags.javaTypeEnhancementState) val jsr305State = languageVersionSettings.getFlag(JvmAnalysisFlags.javaTypeEnhancementState)
register(FirAnnotationTypeQualifierResolver::class, FirAnnotationTypeQualifierResolver(this, jsr305State, javaModuleResolver)) register(FirAnnotationTypeQualifierResolver::class, FirAnnotationTypeQualifierResolver(this, jsr305State, javaModuleResolver))
register(FirEnhancedSymbolsStorage::class, predefinedEnhancementStorage ?: FirEnhancedSymbolsStorage(this)) register(FirEnhancedSymbolsStorage::class, predefinedComponents?.enhancementStorage ?: FirEnhancedSymbolsStorage(this))
register(FirMappedSymbolStorage::class, predefinedComponents?.mappedStorage ?: FirMappedSymbolStorage(this))
register(FirSyntheticPropertiesStorage::class, FirSyntheticPropertiesStorage(this)) register(FirSyntheticPropertiesStorage::class, FirSyntheticPropertiesStorage(this))
register( register(
FirJvmDefaultModeComponent::class, FirJvmDefaultModeComponent::class,
@@ -19,7 +19,6 @@ import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider
import org.jetbrains.kotlin.fir.java.JavaSymbolProvider import org.jetbrains.kotlin.fir.java.JavaSymbolProvider
import org.jetbrains.kotlin.fir.java.deserialization.JvmClassFileBasedSymbolProvider import org.jetbrains.kotlin.fir.java.deserialization.JvmClassFileBasedSymbolProvider
import org.jetbrains.kotlin.fir.java.deserialization.OptionalAnnotationClassesProvider import org.jetbrains.kotlin.fir.java.deserialization.OptionalAnnotationClassesProvider
import org.jetbrains.kotlin.fir.java.enhancement.FirEnhancedSymbolsStorage
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirBuiltinSymbolProvider import org.jetbrains.kotlin.fir.resolve.providers.impl.FirBuiltinSymbolProvider
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirCloneableSymbolProvider import org.jetbrains.kotlin.fir.resolve.providers.impl.FirCloneableSymbolProvider
import org.jetbrains.kotlin.fir.resolve.scopes.wrapScopeWithJvmMapped import org.jetbrains.kotlin.fir.resolve.scopes.wrapScopeWithJvmMapped
@@ -42,7 +41,7 @@ object FirJvmSessionFactory : FirAbstractSessionFactory() {
scope: AbstractProjectFileSearchScope, scope: AbstractProjectFileSearchScope,
packagePartProvider: PackagePartProvider, packagePartProvider: PackagePartProvider,
languageVersionSettings: LanguageVersionSettings, languageVersionSettings: LanguageVersionSettings,
predefinedEnhancementStorage: FirEnhancedSymbolsStorage? = null, predefinedJavaComponents: FirSharableJavaComponents? = null,
registerExtraComponents: ((FirSession) -> Unit), registerExtraComponents: ((FirSession) -> Unit),
): FirSession { ): FirSession {
return createLibrarySession( return createLibrarySession(
@@ -52,7 +51,7 @@ object FirJvmSessionFactory : FirAbstractSessionFactory() {
languageVersionSettings, languageVersionSettings,
extensionRegistrars, extensionRegistrars,
registerExtraComponents = { registerExtraComponents = {
it.registerCommonJavaComponents(projectEnvironment.getJavaModuleResolver(), predefinedEnhancementStorage) it.registerCommonJavaComponents(projectEnvironment.getJavaModuleResolver(), predefinedJavaComponents)
registerExtraComponents(it) registerExtraComponents(it)
}, },
createKotlinScopeProvider = { FirKotlinScopeProvider(::wrapScopeWithJvmMapped) }, createKotlinScopeProvider = { FirKotlinScopeProvider(::wrapScopeWithJvmMapped) },
@@ -92,7 +91,7 @@ object FirJvmSessionFactory : FirAbstractSessionFactory() {
lookupTracker: LookupTracker? = null, lookupTracker: LookupTracker? = null,
enumWhenTracker: EnumWhenTracker? = null, enumWhenTracker: EnumWhenTracker? = null,
importTracker: ImportTracker? = null, importTracker: ImportTracker? = null,
predefinedEnhancementStorage: FirEnhancedSymbolsStorage? = null, predefinedJavaComponents: FirSharableJavaComponents? = null,
needRegisterJavaElementFinder: Boolean, needRegisterJavaElementFinder: Boolean,
registerExtraComponents: ((FirSession) -> Unit) = {}, registerExtraComponents: ((FirSession) -> Unit) = {},
init: FirSessionConfigurator.() -> Unit = {} init: FirSessionConfigurator.() -> Unit = {}
@@ -107,7 +106,7 @@ object FirJvmSessionFactory : FirAbstractSessionFactory() {
importTracker, importTracker,
init, init,
registerExtraComponents = { registerExtraComponents = {
it.registerCommonJavaComponents(projectEnvironment.getJavaModuleResolver(), predefinedEnhancementStorage) it.registerCommonJavaComponents(projectEnvironment.getJavaModuleResolver(), predefinedJavaComponents)
it.registerJavaSpecificResolveComponents() it.registerJavaSpecificResolveComponents()
registerExtraComponents(it) registerExtraComponents(it)
}, },
@@ -7,13 +7,11 @@ package org.jetbrains.kotlin.fir.scopes.jvm
import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap
import org.jetbrains.kotlin.builtins.jvm.JvmBuiltInsSignatures import org.jetbrains.kotlin.builtins.jvm.JvmBuiltInsSignatures
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.containingClassLookupTag import org.jetbrains.kotlin.fir.caches.*
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.utils.classId import org.jetbrains.kotlin.fir.declarations.utils.classId
import org.jetbrains.kotlin.fir.declarations.utils.isFinal import org.jetbrains.kotlin.fir.declarations.utils.isFinal
import org.jetbrains.kotlin.fir.dispatchReceiverClassLookupTagOrNull
import org.jetbrains.kotlin.fir.isSubstitutionOrIntersectionOverride
import org.jetbrains.kotlin.fir.resolve.defaultType import org.jetbrains.kotlin.fir.resolve.defaultType
import org.jetbrains.kotlin.fir.resolve.lookupSuperTypes import org.jetbrains.kotlin.fir.resolve.lookupSuperTypes
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
@@ -51,9 +49,7 @@ class JvmMappedScope(
private val declaredMemberScope: FirContainingNamesAwareScope, private val declaredMemberScope: FirContainingNamesAwareScope,
private val javaMappedClassUseSiteScope: FirTypeScope, private val javaMappedClassUseSiteScope: FirTypeScope,
) : FirTypeScope() { ) : FirTypeScope() {
private val functionsCache = mutableMapOf<FirNamedFunctionSymbol, FirNamedFunctionSymbol>() private val mappedSymbolCache = session.mappedSymbolStorage.cacheByOwner.getValue(firKotlinClass.symbol)
private val constructorsCache = mutableMapOf<FirConstructorSymbol, FirConstructorSymbol>()
private val overrideChecker = FirStandardOverrideChecker(session) private val overrideChecker = FirStandardOverrideChecker(session)
@@ -137,7 +133,7 @@ class JvmMappedScope(
// hidden methods in final class can't be overridden or called with 'super' // hidden methods in final class can't be overridden or called with 'super'
if (jdkMemberStatus == JDKMemberStatus.HIDDEN && firKotlinClass.isFinal) return@processor if (jdkMemberStatus == JDKMemberStatus.HIDDEN && firKotlinClass.isFinal) return@processor
val newSymbol = getOrCreateSubstitutedCopy(symbol, jdkMemberStatus) val newSymbol = mappedSymbolCache.mappedFunctions.getValue(symbol, this to jdkMemberStatus)
processor(newSymbol) processor(newSymbol)
} }
} }
@@ -206,7 +202,7 @@ class JvmMappedScope(
return JDKMemberStatus.HIDDEN return JDKMemberStatus.HIDDEN
} }
private enum class JDKMemberStatus { internal enum class JDKMemberStatus {
HIDDEN, VISIBLE, DROP HIDDEN, VISIBLE, DROP
} }
@@ -214,26 +210,24 @@ class JvmMappedScope(
declaredMemberScope.processPropertiesByName(name, processor) declaredMemberScope.processPropertiesByName(name, processor)
} }
private fun getOrCreateSubstitutedCopy(symbol: FirNamedFunctionSymbol, jdkMemberStatus: JDKMemberStatus): FirNamedFunctionSymbol { private fun createMappedFunction(symbol: FirNamedFunctionSymbol, jdkMemberStatus: JDKMemberStatus): FirNamedFunctionSymbol {
return functionsCache.getOrPut(symbol) { val oldFunction = symbol.fir
val oldFunction = symbol.fir val newSymbol = FirNamedFunctionSymbol(CallableId(firKotlinClass.classId, symbol.callableId.callableName))
val newSymbol = FirNamedFunctionSymbol(CallableId(firKotlinClass.classId, symbol.callableId.callableName)) FirFakeOverrideGenerator.createCopyForFirFunction(
FirFakeOverrideGenerator.createCopyForFirFunction( newSymbol,
newSymbol, baseFunction = symbol.fir,
baseFunction = symbol.fir, derivedClassLookupTag = firKotlinClass.symbol.toLookupTag(),
derivedClassLookupTag = firKotlinClass.symbol.toLookupTag(), session,
session, symbol.fir.origin,
symbol.fir.origin, newDispatchReceiverType = kotlinDispatchReceiverType,
newDispatchReceiverType = kotlinDispatchReceiverType, newParameterTypes = oldFunction.valueParameters.map { substitutor.substituteOrSelf(it.returnTypeRef.coneType) },
newParameterTypes = oldFunction.valueParameters.map { substitutor.substituteOrSelf(it.returnTypeRef.coneType) }, newReturnType = substitutor.substituteOrSelf(oldFunction.returnTypeRef.coneType),
newReturnType = substitutor.substituteOrSelf(oldFunction.returnTypeRef.coneType), ).apply {
).apply { if (jdkMemberStatus == JDKMemberStatus.HIDDEN) {
if (jdkMemberStatus == JDKMemberStatus.HIDDEN) { isHiddenEverywhereBesideSuperCalls = true
isHiddenEverywhereBesideSuperCalls = true
}
} }
newSymbol
} }
return newSymbol
} }
override fun processDirectOverriddenFunctionsWithBaseScope( override fun processDirectOverriddenFunctionsWithBaseScope(
@@ -275,7 +269,7 @@ class JvmMappedScope(
if (javaCtor.isTrivialCopyConstructor()) return@processor if (javaCtor.isTrivialCopyConstructor()) return@processor
if (firKotlinClassConstructors.any { javaCtor.isShadowedBy(it) }) return@processor if (firKotlinClassConstructors.any { javaCtor.isShadowedBy(it) }) return@processor
val newSymbol = getOrCreateCopy(javaCtorSymbol) val newSymbol = mappedSymbolCache.mappedConstructors.getValue(javaCtorSymbol, this)
processor(newSymbol) processor(newSymbol)
} }
@@ -284,27 +278,25 @@ class JvmMappedScope(
private fun FirDeclaration.isDeprecated(): Boolean = symbol.getDeprecation(session, callSite = null) != null private fun FirDeclaration.isDeprecated(): Boolean = symbol.getDeprecation(session, callSite = null) != null
private fun getOrCreateCopy(symbol: FirConstructorSymbol): FirConstructorSymbol { private fun createMappedConstructor(symbol: FirConstructorSymbol): FirConstructorSymbol {
return constructorsCache.getOrPut(symbol) { val oldConstructor = symbol.fir
val oldConstructor = symbol.fir val classId = firKotlinClass.classId
val classId = firKotlinClass.classId val newSymbol = FirConstructorSymbol(CallableId(classId, classId.shortClassName))
val newSymbol = FirConstructorSymbol(CallableId(classId, classId.shortClassName)) FirFakeOverrideGenerator.createCopyForFirConstructor(
FirFakeOverrideGenerator.createCopyForFirConstructor( newSymbol,
newSymbol, session,
session, oldConstructor,
oldConstructor, derivedClassLookupTag = firKotlinClass.symbol.toLookupTag(),
derivedClassLookupTag = firKotlinClass.symbol.toLookupTag(), symbol.fir.origin,
symbol.fir.origin, newDispatchReceiverType = null,
newDispatchReceiverType = null, newReturnType = substitutor.substituteOrSelf(oldConstructor.returnTypeRef.coneType),
newReturnType = substitutor.substituteOrSelf(oldConstructor.returnTypeRef.coneType), newParameterTypes = oldConstructor.valueParameters.map { substitutor.substituteOrSelf(it.returnTypeRef.coneType) },
newParameterTypes = oldConstructor.valueParameters.map { substitutor.substituteOrSelf(it.returnTypeRef.coneType) }, newTypeParameters = null,
newTypeParameters = null, newContextReceiverTypes = emptyList(),
newContextReceiverTypes = emptyList(), isExpect = false,
isExpect = false, fakeOverrideSubstitution = null
fakeOverrideSubstitution = null )
) return newSymbol
newSymbol
}
} }
override fun processDirectOverriddenPropertiesWithBaseScope( override fun processDirectOverriddenPropertiesWithBaseScope(
@@ -322,6 +314,26 @@ class JvmMappedScope(
return declaredMemberScope.getClassifierNames() return declaredMemberScope.getClassifierNames()
} }
class FirMappedSymbolStorage(private val cachesFactory: FirCachesFactory) : FirSessionComponent {
constructor(session: FirSession) : this(session.firCachesFactory)
// Key is the kotlin class
internal val cacheByOwner: FirCache<FirRegularClassSymbol, MappedSymbolsCache, Nothing?> =
cachesFactory.createCache { _ -> MappedSymbolsCache(cachesFactory) }
internal class MappedSymbolsCache(cachesFactory: FirCachesFactory) {
val mappedFunctions: FirCache<FirNamedFunctionSymbol, FirNamedFunctionSymbol, Pair<JvmMappedScope, JDKMemberStatus>> =
cachesFactory.createCache { symbol, (scope, jdkMemberStatus) ->
scope.createMappedFunction(symbol, jdkMemberStatus)
}
val mappedConstructors: FirCache<FirConstructorSymbol, FirConstructorSymbol, JvmMappedScope> =
cachesFactory.createCache { symbol, scope ->
scope.createMappedConstructor(symbol)
}
}
}
companion object { companion object {
/** /**
* For fromClass=A<T1, T2>, toClass=B<F1, F1> classes * For fromClass=A<T1, T2>, toClass=B<F1, F1> classes
@@ -343,3 +355,5 @@ class JvmMappedScope(
return "JVM mapped scope for ${firKotlinClass.classId}" return "JVM mapped scope for ${firKotlinClass.classId}"
} }
} }
private val FirSession.mappedSymbolStorage: JvmMappedScope.FirMappedSymbolStorage by FirSession.sessionComponentAccessor()
@@ -25,7 +25,6 @@ import org.jetbrains.kotlin.fir.checkers.registerExtendedCommonCheckers
import org.jetbrains.kotlin.fir.deserialization.ModuleDataProvider import org.jetbrains.kotlin.fir.deserialization.ModuleDataProvider
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider
import org.jetbrains.kotlin.fir.java.enhancement.FirEnhancedSymbolsStorage
import org.jetbrains.kotlin.fir.session.* import org.jetbrains.kotlin.fir.session.*
import org.jetbrains.kotlin.fir.session.environment.AbstractProjectEnvironment import org.jetbrains.kotlin.fir.session.environment.AbstractProjectEnvironment
import org.jetbrains.kotlin.js.config.JSConfigurationKeys import org.jetbrains.kotlin.js.config.JSConfigurationKeys
@@ -97,7 +96,9 @@ open class FirFrontendFacade(
val project = testServices.compilerConfigurationProvider.getProject(module) val project = testServices.compilerConfigurationProvider.getProject(module)
val extensionRegistrars = FirExtensionRegistrar.getInstances(project) val extensionRegistrars = FirExtensionRegistrar.getInstances(project)
val targetPlatform = module.targetPlatform val targetPlatform = module.targetPlatform
val enhancedSymbolsStorage = runIf(targetPlatform.isJvm()) { FirEnhancedSymbolsStorage(firCachesFactoryForCliMode) } val predefinedJavaComponents = runIf(targetPlatform.isJvm()) {
FirSharableJavaComponents(firCachesFactoryForCliMode)
}
val projectEnvironment = createLibrarySession( val projectEnvironment = createLibrarySession(
module, module,
project, project,
@@ -106,11 +107,11 @@ open class FirFrontendFacade(
moduleDataProvider, moduleDataProvider,
testServices.compilerConfigurationProvider.getCompilerConfiguration(module), testServices.compilerConfigurationProvider.getCompilerConfiguration(module),
extensionRegistrars, extensionRegistrars,
enhancedSymbolsStorage predefinedJavaComponents
) )
val firOutputPartForDependsOnModules = sortedModules.map { val firOutputPartForDependsOnModules = sortedModules.map {
analyze(it, moduleDataMap[it]!!, targetPlatform, projectEnvironment, extensionRegistrars, enhancedSymbolsStorage) analyze(it, moduleDataMap[it]!!, targetPlatform, projectEnvironment, extensionRegistrars, predefinedJavaComponents)
} }
return FirOutputArtifactImpl(firOutputPartForDependsOnModules) return FirOutputArtifactImpl(firOutputPartForDependsOnModules)
@@ -172,7 +173,7 @@ open class FirFrontendFacade(
moduleDataProvider: ModuleDataProvider, moduleDataProvider: ModuleDataProvider,
configuration: CompilerConfiguration, configuration: CompilerConfiguration,
extensionRegistrars: List<FirExtensionRegistrar>, extensionRegistrars: List<FirExtensionRegistrar>,
enhancedSymbolsStorage: FirEnhancedSymbolsStorage? predefinedJavaComponents: FirSharableJavaComponents?
): AbstractProjectEnvironment? { ): AbstractProjectEnvironment? {
val compilerConfigurationProvider = testServices.compilerConfigurationProvider val compilerConfigurationProvider = testServices.compilerConfigurationProvider
val projectEnvironment: AbstractProjectEnvironment? val projectEnvironment: AbstractProjectEnvironment?
@@ -210,7 +211,7 @@ open class FirFrontendFacade(
projectFileSearchScope, projectFileSearchScope,
packagePartProvider, packagePartProvider,
languageVersionSettings, languageVersionSettings,
predefinedEnhancementStorage = enhancedSymbolsStorage, predefinedJavaComponents = predefinedJavaComponents,
registerExtraComponents = ::registerExtraComponents, registerExtraComponents = ::registerExtraComponents,
) )
} }
@@ -267,7 +268,7 @@ open class FirFrontendFacade(
targetPlatform: TargetPlatform, targetPlatform: TargetPlatform,
projectEnvironment: AbstractProjectEnvironment?, projectEnvironment: AbstractProjectEnvironment?,
extensionRegistrars: List<FirExtensionRegistrar>, extensionRegistrars: List<FirExtensionRegistrar>,
enhancedSymbolsStorage: FirEnhancedSymbolsStorage?, predefinedJavaComponents: FirSharableJavaComponents?,
): FirOutputPartForDependsOnModule { ): FirOutputPartForDependsOnModule {
val compilerConfigurationProvider = testServices.compilerConfigurationProvider val compilerConfigurationProvider = testServices.compilerConfigurationProvider
val moduleInfoProvider = testServices.firModuleInfoProvider val moduleInfoProvider = testServices.firModuleInfoProvider
@@ -301,7 +302,7 @@ open class FirFrontendFacade(
projectEnvironment, projectEnvironment,
extensionRegistrars, extensionRegistrars,
sessionConfigurator, sessionConfigurator,
enhancedSymbolsStorage, predefinedJavaComponents,
project, project,
ktFiles ktFiles
) )
@@ -330,7 +331,7 @@ open class FirFrontendFacade(
projectEnvironment: AbstractProjectEnvironment?, projectEnvironment: AbstractProjectEnvironment?,
extensionRegistrars: List<FirExtensionRegistrar>, extensionRegistrars: List<FirExtensionRegistrar>,
sessionConfigurator: FirSessionConfigurator.() -> Unit, sessionConfigurator: FirSessionConfigurator.() -> Unit,
enhancedSymbolsStorage: FirEnhancedSymbolsStorage?, predefinedJavaComponents: FirSharableJavaComponents?,
project: Project, project: Project,
ktFiles: Collection<KtFile>, ktFiles: Collection<KtFile>,
): FirSession { ): FirSession {
@@ -357,7 +358,7 @@ open class FirFrontendFacade(
incrementalCompilationContext = null, incrementalCompilationContext = null,
extensionRegistrars, extensionRegistrars,
languageVersionSettings, languageVersionSettings,
predefinedEnhancementStorage = enhancedSymbolsStorage, predefinedJavaComponents = predefinedJavaComponents,
needRegisterJavaElementFinder = true, needRegisterJavaElementFinder = true,
registerExtraComponents = ::registerExtraComponents, registerExtraComponents = ::registerExtraComponents,
init = sessionConfigurator, init = sessionConfigurator,