FE: introduce FirComposableSessionComponent.Single
diff --git a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/FirJvmOverridesBackwardCompatibilityHelper.kt b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/FirJvmOverridesBackwardCompatibilityHelper.kt index 7d7fa6b..e422ca2 100644 --- a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/FirJvmOverridesBackwardCompatibilityHelper.kt +++ b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/FirJvmOverridesBackwardCompatibilityHelper.kt
@@ -6,6 +6,7 @@ package org.jetbrains.kotlin.fir.analysis.jvm import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap +import org.jetbrains.kotlin.fir.FirComposableSessionComponent import org.jetbrains.kotlin.fir.analysis.FirOverridesBackwardCompatibilityHelper import org.jetbrains.kotlin.fir.containingClassLookupTag import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin @@ -18,7 +19,8 @@ * For example, overriding members of * `kotlin.Throwable` does not require `override` keyword. */ -object FirJvmOverridesBackwardCompatibilityHelper : FirOverridesBackwardCompatibilityHelper() { +object FirJvmOverridesBackwardCompatibilityHelper : FirOverridesBackwardCompatibilityHelper(), + FirComposableSessionComponent.Single<FirOverridesBackwardCompatibilityHelper> { override fun additionalCheck(member: FirCallableSymbol<*>): Boolean? { if (member.origin == FirDeclarationOrigin.Synthetic.FakeHiddenInPreparationForNewJdk) return true
diff --git a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/FirJavaNullabilityWarningUpperBoundsProvider.kt b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/FirJavaNullabilityWarningUpperBoundsProvider.kt index e9f1e1b..f0d2ea4 100644 --- a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/FirJavaNullabilityWarningUpperBoundsProvider.kt +++ b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/FirJavaNullabilityWarningUpperBoundsProvider.kt
@@ -6,6 +6,7 @@ package org.jetbrains.kotlin.fir.analysis.jvm.checkers import org.jetbrains.kotlin.diagnostics.KtDiagnosticFactory2 +import org.jetbrains.kotlin.fir.FirComposableSessionComponent import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.analysis.checkers.FirPlatformUpperBoundsProvider import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors @@ -13,7 +14,8 @@ import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.typeContext -class FirJavaNullabilityWarningUpperBoundsProvider(session: FirSession) : FirPlatformUpperBoundsProvider() { +class FirJavaNullabilityWarningUpperBoundsProvider(session: FirSession) : FirPlatformUpperBoundsProvider(), + FirComposableSessionComponent.Single<FirPlatformUpperBoundsProvider> { private val substitutor: EnhancedForWarningConeSubstitutor = EnhancedForWarningConeSubstitutor( session.typeContext, )
diff --git a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/FirJvmAnnotationsPlatformSpecificSupportComponent.kt b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/FirJvmAnnotationsPlatformSpecificSupportComponent.kt index 932b907..96f0a7b 100644 --- a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/FirJvmAnnotationsPlatformSpecificSupportComponent.kt +++ b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/FirJvmAnnotationsPlatformSpecificSupportComponent.kt
@@ -5,6 +5,7 @@ package org.jetbrains.kotlin.fir.analysis.jvm.checkers +import org.jetbrains.kotlin.fir.FirComposableSessionComponent import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.expressions.FirAnnotation @@ -13,7 +14,8 @@ import org.jetbrains.kotlin.name.JvmStandardClassIds import org.jetbrains.kotlin.name.StandardClassIds -object FirJvmAnnotationsPlatformSpecificSupportComponent : FirAnnotationsPlatformSpecificSupportComponent() { +object FirJvmAnnotationsPlatformSpecificSupportComponent : FirAnnotationsPlatformSpecificSupportComponent(), + FirComposableSessionComponent.Single<FirAnnotationsPlatformSpecificSupportComponent> { override val requiredAnnotationsWithArguments: Set<ClassId> = setOf( StandardClassIds.Annotations.Deprecated, StandardClassIds.Annotations.Target,
diff --git a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/FirJvmInlineCheckerComponent.kt b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/FirJvmInlineCheckerComponent.kt index 3f367ef..f6aa306 100644 --- a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/FirJvmInlineCheckerComponent.kt +++ b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/FirJvmInlineCheckerComponent.kt
@@ -7,6 +7,7 @@ import org.jetbrains.kotlin.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.diagnostics.reportOn +import org.jetbrains.kotlin.fir.FirComposableSessionComponent import org.jetbrains.kotlin.fir.analysis.checkers.FirInlineCheckerPlatformSpecificComponent import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext import org.jetbrains.kotlin.fir.analysis.checkers.declaration.isLocalMember @@ -17,7 +18,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirScriptSymbol -class FirJvmInlineCheckerComponent : FirInlineCheckerPlatformSpecificComponent() { +class FirJvmInlineCheckerComponent : FirInlineCheckerPlatformSpecificComponent(), FirComposableSessionComponent.Single<FirInlineCheckerPlatformSpecificComponent> { context(context: CheckerContext, reporter: DiagnosticReporter) override fun isGenerallyOk(declaration: FirDeclaration): Boolean { // local inline functions are prohibited
diff --git a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/FirJvmPrimaryConstructorSuperTypeCheckerPlatformComponent.kt b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/FirJvmPrimaryConstructorSuperTypeCheckerPlatformComponent.kt index e023738..b1c74f9 100644 --- a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/FirJvmPrimaryConstructorSuperTypeCheckerPlatformComponent.kt +++ b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/FirJvmPrimaryConstructorSuperTypeCheckerPlatformComponent.kt
@@ -5,12 +5,14 @@ package org.jetbrains.kotlin.fir.analysis.jvm.checkers +import org.jetbrains.kotlin.fir.FirComposableSessionComponent import org.jetbrains.kotlin.fir.analysis.checkers.FirPrimaryConstructorSuperTypeCheckerPlatformComponent import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.JvmStandardClassIds import org.jetbrains.kotlin.name.StandardClassIds -object FirJvmPrimaryConstructorSuperTypeCheckerPlatformComponent : FirPrimaryConstructorSuperTypeCheckerPlatformComponent() { +object FirJvmPrimaryConstructorSuperTypeCheckerPlatformComponent : FirPrimaryConstructorSuperTypeCheckerPlatformComponent(), + FirComposableSessionComponent.Single<FirPrimaryConstructorSuperTypeCheckerPlatformComponent> { override val supertypesThatDontNeedInitializationInSubtypesConstructors: Set<ClassId> = setOf(StandardClassIds.Enum, JvmStandardClassIds.Java.Record) }
diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/FirDefaultOverridesBackwardCompatibilityHelper.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/FirDefaultOverridesBackwardCompatibilityHelper.kt index 24255b1..253b222 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/FirDefaultOverridesBackwardCompatibilityHelper.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/FirDefaultOverridesBackwardCompatibilityHelper.kt
@@ -5,4 +5,7 @@ package org.jetbrains.kotlin.fir.analysis -object FirDefaultOverridesBackwardCompatibilityHelper : FirOverridesBackwardCompatibilityHelper() +import org.jetbrains.kotlin.fir.FirComposableSessionComponent + +object FirDefaultOverridesBackwardCompatibilityHelper : FirOverridesBackwardCompatibilityHelper(), + FirComposableSessionComponent.Single<FirOverridesBackwardCompatibilityHelper>
diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirPrimaryConstructorSuperTypeCheckerPlatformComponent.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirPrimaryConstructorSuperTypeCheckerPlatformComponent.kt index 136ed1b..66d2c76 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirPrimaryConstructorSuperTypeCheckerPlatformComponent.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirPrimaryConstructorSuperTypeCheckerPlatformComponent.kt
@@ -14,7 +14,7 @@ abstract class FirPrimaryConstructorSuperTypeCheckerPlatformComponent : FirComposableSessionComponent<FirPrimaryConstructorSuperTypeCheckerPlatformComponent> { abstract val supertypesThatDontNeedInitializationInSubtypesConstructors: Set<ClassId> - object Default : FirPrimaryConstructorSuperTypeCheckerPlatformComponent() { + object Default : FirPrimaryConstructorSuperTypeCheckerPlatformComponent(), FirComposableSessionComponent.Single<FirPrimaryConstructorSuperTypeCheckerPlatformComponent> { override val supertypesThatDontNeedInitializationInSubtypesConstructors: Set<ClassId> = setOf(StandardClassIds.Enum) }
diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/ComponentsContainers.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/ComponentsContainers.kt index 10cd5a71d..d83027f 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/ComponentsContainers.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/ComponentsContainers.kt
@@ -86,7 +86,7 @@ register(FirSamConstructorStorage::class, FirSamConstructorStorage(this)) register(FirOverrideService::class, FirOverrideService(this)) register(FirDynamicMembersStorage::class, FirDynamicMembersStorage(this)) - register(FirEnumEntriesSupport(this)) + register(FirEnumEntriesSupport::class, FirEnumEntriesSupport.Default(this)) register(FirOverrideChecker::class, FirStandardOverrideChecker(this)) register(FirDeclarationOverloadabilityHelper::class, FirDeclarationOverloadabilityHelperImpl(this)) register(FirAnnotationsPlatformSpecificSupportComponent.Default) @@ -153,7 +153,10 @@ ) register(FirEnhancedSymbolsStorage::class, predefinedComponents?.enhancementStorage ?: FirEnhancedSymbolsStorage(this)) register(FirMappedSymbolStorage::class, predefinedComponents?.mappedStorage ?: FirMappedSymbolStorage(this)) - register(FirRenamedForOverrideSymbolsStorage::class, predefinedComponents?.renamedFunctionsStorage ?: FirRenamedForOverrideSymbolsStorage(this)) + register( + FirRenamedForOverrideSymbolsStorage::class, + predefinedComponents?.renamedFunctionsStorage ?: FirRenamedForOverrideSymbolsStorage(this) + ) register(FirSyntheticPropertiesStorage::class, FirSyntheticPropertiesStorage(this)) register(PlatformSupertypeUpdater::class, JvmSupertypeUpdater(this)) register(JavaOverridabilityRules(this))
diff --git a/compiler/fir/fir-jvm/src/org/jetbrains/kotlin/fir/java/FirJavaVisibilityChecker.kt b/compiler/fir/fir-jvm/src/org/jetbrains/kotlin/fir/java/FirJavaVisibilityChecker.kt index fd60778..7ffa0fd 100644 --- a/compiler/fir/fir-jvm/src/org/jetbrains/kotlin/fir/java/FirJavaVisibilityChecker.kt +++ b/compiler/fir/fir-jvm/src/org/jetbrains/kotlin/fir/java/FirJavaVisibilityChecker.kt
@@ -24,7 +24,7 @@ import org.jetbrains.kotlin.name.FqName @NoMutableState -object FirJavaVisibilityChecker : FirVisibilityChecker() { +object FirJavaVisibilityChecker : FirVisibilityChecker(), FirComposableSessionComponent.Single<FirVisibilityChecker> { override fun platformVisibilityCheck( declarationVisibility: Visibility, symbol: FirBasedSymbol<*>,
diff --git a/compiler/fir/fir-jvm/src/org/jetbrains/kotlin/fir/java/deserialization/FirJvmDeserializationExtension.kt b/compiler/fir/fir-jvm/src/org/jetbrains/kotlin/fir/java/deserialization/FirJvmDeserializationExtension.kt index 6e34df0..4521cd7 100644 --- a/compiler/fir/fir-jvm/src/org/jetbrains/kotlin/fir/java/deserialization/FirJvmDeserializationExtension.kt +++ b/compiler/fir/fir-jvm/src/org/jetbrains/kotlin/fir/java/deserialization/FirJvmDeserializationExtension.kt
@@ -6,6 +6,7 @@ package org.jetbrains.kotlin.fir.java.deserialization import org.jetbrains.kotlin.builtins.jvm.JvmBuiltInsSignatures +import org.jetbrains.kotlin.fir.FirComposableSessionComponent import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.builder.FirRegularClassBuilder import org.jetbrains.kotlin.fir.deserialization.FirConstDeserializer @@ -24,7 +25,8 @@ import org.jetbrains.kotlin.serialization.SerializerExtensionProtocol import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource -class FirJvmDeserializationExtension(session: FirSession) : FirDeserializationExtension(session) { +class FirJvmDeserializationExtension(session: FirSession) : FirDeserializationExtension(session), + FirComposableSessionComponent.Single<FirDeserializationExtension> { override fun createConstDeserializer( containerSource: DeserializedContainerSource?, session: FirSession,
diff --git a/compiler/fir/fir-jvm/src/org/jetbrains/kotlin/fir/java/scopes/JavaOverridabilityRules.kt b/compiler/fir/fir-jvm/src/org/jetbrains/kotlin/fir/java/scopes/JavaOverridabilityRules.kt index b5aa750..faffb81 100644 --- a/compiler/fir/fir-jvm/src/org/jetbrains/kotlin/fir/java/scopes/JavaOverridabilityRules.kt +++ b/compiler/fir/fir-jvm/src/org/jetbrains/kotlin/fir/java/scopes/JavaOverridabilityRules.kt
@@ -7,6 +7,7 @@ import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.descriptors.Visibility +import org.jetbrains.kotlin.fir.FirComposableSessionComponent import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin @@ -19,7 +20,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol import org.jetbrains.kotlin.fir.unwrapFakeOverrides -class JavaOverridabilityRules(private val session: FirSession) : PlatformSpecificOverridabilityRules() { +class JavaOverridabilityRules(private val session: FirSession) : PlatformSpecificOverridabilityRules(), FirComposableSessionComponent.Single<PlatformSpecificOverridabilityRules> { // Note: return types (considerReturnTypeKinds) look not important when attempting intersection // From the other side, they can break relevant tests like intersectionWithJavaVoidNothing.kt // The similar case exists in bootstrap (see IrSimpleBuiltinOperatorDescriptorImpl)
diff --git a/compiler/fir/fir-jvm/src/org/jetbrains/kotlin/fir/resolve/FirJavaClassMapper.kt b/compiler/fir/fir-jvm/src/org/jetbrains/kotlin/fir/resolve/FirJavaClassMapper.kt index db00b02..140808a 100644 --- a/compiler/fir/fir-jvm/src/org/jetbrains/kotlin/fir/resolve/FirJavaClassMapper.kt +++ b/compiler/fir/fir-jvm/src/org/jetbrains/kotlin/fir/resolve/FirJavaClassMapper.kt
@@ -6,6 +6,7 @@ package org.jetbrains.kotlin.fir.resolve import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap +import org.jetbrains.kotlin.fir.FirComposableSessionComponent import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.NoMutableState import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration @@ -16,7 +17,8 @@ import org.jetbrains.kotlin.name.JvmStandardClassIds @NoMutableState -class FirJavaClassMapper(private val session: FirSession) : FirPlatformClassMapper() { +class FirJavaClassMapper(private val session: FirSession) : FirPlatformClassMapper(), + FirComposableSessionComponent.Single<FirPlatformClassMapper> { override fun getCorrespondingPlatformClass(declaration: FirClassLikeDeclaration): FirRegularClass? { val javaClassId = getCorrespondingPlatformClass(declaration.symbol.classId) return javaClassId?.let { session.symbolProvider.getClassLikeSymbolByClassId(it)?.fir } as? FirRegularClass
diff --git a/compiler/fir/fir-jvm/src/org/jetbrains/kotlin/fir/resolve/calls/jvm/JvmCallConflictResolverFactory.kt b/compiler/fir/fir-jvm/src/org/jetbrains/kotlin/fir/resolve/calls/jvm/JvmCallConflictResolverFactory.kt index 3c989c0..a8f7bd44 100644 --- a/compiler/fir/fir-jvm/src/org/jetbrains/kotlin/fir/resolve/calls/jvm/JvmCallConflictResolverFactory.kt +++ b/compiler/fir/fir-jvm/src/org/jetbrains/kotlin/fir/resolve/calls/jvm/JvmCallConflictResolverFactory.kt
@@ -5,21 +5,14 @@ package org.jetbrains.kotlin.fir.resolve.calls.jvm +import org.jetbrains.kotlin.fir.FirComposableSessionComponent import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.NoMutableState -import org.jetbrains.kotlin.fir.resolve.BodyResolveComponents import org.jetbrains.kotlin.fir.resolve.calls.overloads.ConeCallConflictResolver import org.jetbrains.kotlin.fir.resolve.calls.overloads.ConeCallConflictResolverFactory -import org.jetbrains.kotlin.fir.resolve.calls.overloads.ConeCompositeConflictResolver -import org.jetbrains.kotlin.fir.resolve.calls.overloads.ConeEquivalentCallConflictResolver -import org.jetbrains.kotlin.fir.resolve.calls.overloads.ConeIntegerOperatorConflictResolver -import org.jetbrains.kotlin.fir.resolve.calls.overloads.ConeOverloadConflictResolver -import org.jetbrains.kotlin.fir.resolve.inference.InferenceComponents -import org.jetbrains.kotlin.fir.types.typeContext -import org.jetbrains.kotlin.resolve.jvm.JvmTypeSpecificityComparator @NoMutableState -object JvmCallConflictResolverFactory : ConeCallConflictResolverFactory() { +object JvmCallConflictResolverFactory : ConeCallConflictResolverFactory(), FirComposableSessionComponent.Single<ConeCallConflictResolverFactory> { override fun createAdditionalResolvers(session: FirSession): List<ConeCallConflictResolver> { return listOf(JvmPlatformOverloadsConflictResolver(session)) }
diff --git a/compiler/fir/fir-jvm/src/org/jetbrains/kotlin/fir/scopes/jvm/FirJvmDelegatedMembersFilter.kt b/compiler/fir/fir-jvm/src/org/jetbrains/kotlin/fir/scopes/jvm/FirJvmDelegatedMembersFilter.kt index d1958d2..41420a3 100644 --- a/compiler/fir/fir-jvm/src/org/jetbrains/kotlin/fir/scopes/jvm/FirJvmDelegatedMembersFilter.kt +++ b/compiler/fir/fir-jvm/src/org/jetbrains/kotlin/fir/scopes/jvm/FirJvmDelegatedMembersFilter.kt
@@ -6,6 +6,7 @@ package org.jetbrains.kotlin.fir.scopes.jvm import org.jetbrains.kotlin.descriptors.Modality +import org.jetbrains.kotlin.fir.FirComposableSessionComponent import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin import org.jetbrains.kotlin.fir.declarations.hasAnnotation @@ -21,7 +22,8 @@ * KT-18324: If original is java method with default then delegated function should not be generated * See org.jetbrains.kotlin.resolve.jvm.JvmDelegationFilter for K1 implementation */ -class FirJvmDelegatedMembersFilter(private val session: FirSession) : FirDelegatedMembersFilter() { +class FirJvmDelegatedMembersFilter(private val session: FirSession) : FirDelegatedMembersFilter(), + FirComposableSessionComponent.Single<FirDelegatedMembersFilter> { companion object { val PLATFORM_DEPENDENT_ANNOTATION_CLASS_ID: ClassId = ClassId.topLevel(FqName("kotlin.internal.PlatformDependent")) }
diff --git a/compiler/fir/fir-native/src/org/jetbrains/kotlin/fir/backend/native/FirNativeClassMapper.kt b/compiler/fir/fir-native/src/org/jetbrains/kotlin/fir/backend/native/FirNativeClassMapper.kt index f8d8349..9280da7 100644 --- a/compiler/fir/fir-native/src/org/jetbrains/kotlin/fir/backend/native/FirNativeClassMapper.kt +++ b/compiler/fir/fir-native/src/org/jetbrains/kotlin/fir/backend/native/FirNativeClassMapper.kt
@@ -5,13 +5,14 @@ package org.jetbrains.kotlin.fir.backend.native +import org.jetbrains.kotlin.fir.FirComposableSessionComponent import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration import org.jetbrains.kotlin.fir.declarations.FirRegularClass import org.jetbrains.kotlin.fir.scopes.FirPlatformClassMapper import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.NativeRuntimeNames -class FirNativeClassMapper : FirPlatformClassMapper() { +class FirNativeClassMapper : FirPlatformClassMapper(), FirComposableSessionComponent.Single<FirPlatformClassMapper> { override fun getCorrespondingPlatformClass(declaration: FirClassLikeDeclaration): FirRegularClass? { return null }
diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/FirVisibilityChecker.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/FirVisibilityChecker.kt index dd4b200..ed7efc2 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/FirVisibilityChecker.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/FirVisibilityChecker.kt
@@ -47,7 +47,7 @@ abstract class FirVisibilityChecker : FirComposableSessionComponent<FirVisibilityChecker> { @NoMutableState - object Default : FirVisibilityChecker() { + object Default : FirVisibilityChecker(), FirComposableSessionComponent.Single<FirVisibilityChecker> { override fun platformVisibilityCheck( declarationVisibility: Visibility, symbol: FirBasedSymbol<*>,
diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/declarations/FirAnnotationsPlatformSpecificSupportComponent.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/declarations/FirAnnotationsPlatformSpecificSupportComponent.kt index 361c942..5be6f7d 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/declarations/FirAnnotationsPlatformSpecificSupportComponent.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/declarations/FirAnnotationsPlatformSpecificSupportComponent.kt
@@ -17,7 +17,8 @@ /** * @see org.jetbrains.kotlin.light.classes.symbol.annotations.GranularAnnotationsBox.Companion */ -abstract class FirAnnotationsPlatformSpecificSupportComponent : FirComposableSessionComponent<FirAnnotationsPlatformSpecificSupportComponent> { +abstract class FirAnnotationsPlatformSpecificSupportComponent : + FirComposableSessionComponent<FirAnnotationsPlatformSpecificSupportComponent> { abstract val requiredAnnotationsWithArguments: Set<ClassId> abstract val requiredAnnotations: Set<ClassId> abstract val volatileAnnotations: Set<ClassId> @@ -56,7 +57,8 @@ class Composed( override val components: List<FirAnnotationsPlatformSpecificSupportComponent> - ) : FirAnnotationsPlatformSpecificSupportComponent(), FirComposableSessionComponent.Composed<FirAnnotationsPlatformSpecificSupportComponent> { + ) : FirAnnotationsPlatformSpecificSupportComponent(), + FirComposableSessionComponent.Composed<FirAnnotationsPlatformSpecificSupportComponent> { override val requiredAnnotationsWithArguments: Set<ClassId> = components.flatMapTo(mutableSetOf()) { it.requiredAnnotationsWithArguments } override val requiredAnnotations: Set<ClassId> = components.flatMapTo(mutableSetOf()) { it.requiredAnnotations } @@ -91,7 +93,8 @@ return Composed(components) } - object Default : FirAnnotationsPlatformSpecificSupportComponent() { + object Default : FirAnnotationsPlatformSpecificSupportComponent(), + FirComposableSessionComponent.Single<FirAnnotationsPlatformSpecificSupportComponent> { override val requiredAnnotationsWithArguments: Set<ClassId> = setOf( StandardClassIds.Annotations.Deprecated, StandardClassIds.Annotations.Target,
diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/declarations/FirTypeSpecificityComparatorProvider.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/declarations/FirTypeSpecificityComparatorProvider.kt index a40c946..02c0c23 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/declarations/FirTypeSpecificityComparatorProvider.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/declarations/FirTypeSpecificityComparatorProvider.kt
@@ -13,7 +13,7 @@ sealed class FirTypeSpecificityComparatorProvider : FirComposableSessionComponent<FirTypeSpecificityComparatorProvider> { abstract val typeSpecificityComparator: TypeSpecificityComparator - class Simple(override val typeSpecificityComparator: TypeSpecificityComparator) : FirTypeSpecificityComparatorProvider() + class Simple(override val typeSpecificityComparator: TypeSpecificityComparator) : FirTypeSpecificityComparatorProvider(), FirComposableSessionComponent.Single<FirTypeSpecificityComparatorProvider> {} class Composed( override val components: List<FirTypeSpecificityComparatorProvider>,
diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/FirDefaultImportsProviderHolder.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/FirDefaultImportsProviderHolder.kt index db37e39..c1ac988 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/FirDefaultImportsProviderHolder.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/FirDefaultImportsProviderHolder.kt
@@ -7,7 +7,6 @@ import org.jetbrains.kotlin.fir.FirComposableSessionComponent import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.FirSessionComponent import org.jetbrains.kotlin.fir.SessionConfiguration import org.jetbrains.kotlin.resolve.DefaultImportsProvider @@ -18,7 +17,8 @@ } } - class Single(override val provider: DefaultImportsProvider) : FirDefaultImportsProviderHolder() + class Single(override val provider: DefaultImportsProvider) : FirDefaultImportsProviderHolder(), + FirComposableSessionComponent.Single<FirDefaultImportsProviderHolder> class Composed( override val components: List<FirDefaultImportsProviderHolder>
diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/FirPlatformClassMapper.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/FirPlatformClassMapper.kt index 8187084..e684435 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/FirPlatformClassMapper.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/FirPlatformClassMapper.kt
@@ -15,7 +15,7 @@ abstract class FirPlatformClassMapper : FirComposableSessionComponent<FirPlatformClassMapper> { @NoMutableState - object Default : FirPlatformClassMapper() { + object Default : FirPlatformClassMapper(), FirComposableSessionComponent.Single<FirPlatformClassMapper> { override fun getCorrespondingPlatformClass(declaration: FirClassLikeDeclaration): FirRegularClass? { return null }
diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirDelegatedMemberScope.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirDelegatedMemberScope.kt index 5532e44..46e3385 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirDelegatedMemberScope.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirDelegatedMemberScope.kt
@@ -271,7 +271,7 @@ abstract class FirDelegatedMembersFilter : FirComposableSessionComponent<FirDelegatedMembersFilter> { abstract fun shouldNotGenerateDelegatedMember(memberSymbolFromSuperInterface: FirCallableSymbol<*>): Boolean - object Default : FirDelegatedMembersFilter() { + object Default : FirDelegatedMembersFilter(), FirComposableSessionComponent.Single<FirDelegatedMembersFilter> { override fun shouldNotGenerateDelegatedMember(memberSymbolFromSuperInterface: FirCallableSymbol<*>): Boolean { return false }
diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirEnumEntriesSupport.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirEnumEntriesSupport.kt index d2bf865..8a9f8b5 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirEnumEntriesSupport.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirEnumEntriesSupport.kt
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.fir.resolve.providers.getRegularClassSymbolByClassId import org.jetbrains.kotlin.name.StandardClassIds -open class FirEnumEntriesSupport(val session: FirSession) : FirComposableSessionComponent<FirEnumEntriesSupport> { +abstract class FirEnumEntriesSupport(val session: FirSession) : FirComposableSessionComponent<FirEnumEntriesSupport> { protected val isEnumEntriesAvailable: Boolean by lazy { session.getRegularClassSymbolByClassId(StandardClassIds.EnumEntries) != null } @@ -22,6 +22,8 @@ return klass.hasEnumEntries && isEnumEntriesAvailable } + class Default(session: FirSession) : FirEnumEntriesSupport(session), FirComposableSessionComponent.Single<FirEnumEntriesSupport> + class Composed( session: FirSession, override val components: List<FirEnumEntriesSupport> @@ -37,7 +39,8 @@ } } -class FirJvmEnumEntriesSupport(session: FirSession) : FirEnumEntriesSupport(session) { +class FirJvmEnumEntriesSupport(session: FirSession) : FirEnumEntriesSupport(session), + FirComposableSessionComponent.Single<FirEnumEntriesSupport> { // In JVM modules "entries" can be called even on enum compiled without this property. override fun canSynthesizeEnumEntriesFor(klass: FirClass): Boolean = isEnumEntriesAvailable }
diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/overloads/ConeCallConflictResolver.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/overloads/ConeCallConflictResolver.kt index 035af9c..03656b2 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/overloads/ConeCallConflictResolver.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/overloads/ConeCallConflictResolver.kt
@@ -46,7 +46,7 @@ abstract fun createAdditionalResolvers(session: FirSession): List<ConeCallConflictResolver> - object Default : ConeCallConflictResolverFactory() { + object Default : ConeCallConflictResolverFactory(), FirComposableSessionComponent.Single<ConeCallConflictResolverFactory> { override fun createAdditionalResolvers(session: FirSession): List<ConeCallConflictResolver> { return emptyList() }
diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirDeclarationNameInvalidCharsProvider.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirDeclarationNameInvalidCharsProvider.kt index 524c1ab..e0cc822 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirDeclarationNameInvalidCharsProvider.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirDeclarationNameInvalidCharsProvider.kt
@@ -14,7 +14,8 @@ override val invalidChars: Set<Char> = components.flatMapTo(mutableSetOf()) { it.invalidChars } } - class Simple(override val invalidChars: Set<Char>) : FirDeclarationNameInvalidCharsProvider() + class Simple(override val invalidChars: Set<Char>) : FirDeclarationNameInvalidCharsProvider(), + FirComposableSessionComponent.Single<FirDeclarationNameInvalidCharsProvider> @SessionConfiguration override fun createComposed(components: List<FirDeclarationNameInvalidCharsProvider>): Composed {
diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirSessionComponent.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirSessionComponent.kt index e3419f2..b1e9dfd 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirSessionComponent.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirSessionComponent.kt
@@ -19,22 +19,27 @@ @SessionConfiguration fun compose(other: T): T { val components = buildList { - addAll(components) - addAll(other.components) + addAll(asComponentsList()) + addAll(other.asComponentsList()) }.distinct() components.singleOrNull()?.let { return it } @Suppress("UNCHECKED_CAST") return createComposed(components) as T } - @Suppress("UNCHECKED_CAST") - val components: List<T> - get() = listOf(this as T) + fun asComponentsList(): List<T> @SessionConfiguration fun createComposed(components: List<T>): Composed<T> + interface Single<T : FirComposableSessionComponent<T>> : FirComposableSessionComponent<T> { + @Suppress("UNCHECKED_CAST") + override fun asComponentsList(): List<T> = listOf(this as T) + } + interface Composed<T : FirComposableSessionComponent<T>> : FirComposableSessionComponent<T> { - override val components: List<T> + val components: List<T> + + override fun asComponentsList(): List<T> = components } }