[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:
committed by
Space Team
parent
bb36beb364
commit
fa4c6d55c1
@@ -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,
|
||||||
|
|||||||
+14
-2
@@ -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,
|
||||||
|
|||||||
+4
-5
@@ -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()
|
||||||
|
|||||||
+11
-10
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user