diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaClass.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaClass.kt index 72304a0b60b..bfb1f7a720f 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaClass.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaClass.kt @@ -144,6 +144,10 @@ class FirJavaClass @FirImplementationDetail internal constructor( typeParameters.transformInplace(transformer, data) return this } + + override fun replaceStatus(newStatus: FirDeclarationStatus) { + status = newStatus + } } @FirBuilderDsl diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaConstructor.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaConstructor.kt index b53568fa158..881a4edd409 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaConstructor.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaConstructor.kt @@ -156,6 +156,10 @@ class FirJavaConstructor @FirImplementationDetail constructor( override fun replaceBody(newBody: FirBlock?) { error("Body cannot be replaced for FirJavaConstructor") } + + override fun replaceStatus(newStatus: FirDeclarationStatus) { + status = newStatus + } } @FirBuilderDsl diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaField.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaField.kt index 74b1228c461..eaf1dcb4767 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaField.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaField.kt @@ -166,6 +166,10 @@ class FirJavaField @FirImplementationDetail constructor( override fun replaceContextReceivers(newContextReceivers: List) { error("Body cannot be replaced for FirJavaField") } + + override fun replaceStatus(newStatus: FirDeclarationStatus) { + status = newStatus + } } @FirBuilderDsl diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaMethod.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaMethod.kt index f5cc3f5952a..e06b7badc03 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaMethod.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaMethod.kt @@ -184,6 +184,10 @@ class FirJavaMethod @FirImplementationDetail constructor( override fun replaceContextReceivers(newContextReceivers: List) { error("Body cannot be replaced for FirJavaMethod") } + + override fun replaceStatus(newStatus: FirDeclarationStatus) { + status = newStatus + } } val ALL_JAVA_OPERATION_NAMES = diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaValueParameter.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaValueParameter.kt index 3f2fb956b60..95d6c978f07 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaValueParameter.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaValueParameter.kt @@ -196,6 +196,10 @@ class FirJavaValueParameter @FirImplementationDetail constructor( override fun replaceContextReceivers(newContextReceivers: List) { error("Body cannot be replaced for FirJavaValueParameter") } + + override fun replaceStatus(newStatus: FirDeclarationStatus) { + error("Status cannot be replaced for FirJavaValueParameter") + } } @FirBuilderDsl diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirStatusTransformerExtension.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirStatusTransformerExtension.kt index c612551a79e..aebb8d7392d 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirStatusTransformerExtension.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirStatusTransformerExtension.kt @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl +import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol import kotlin.reflect.KClass abstract class FirStatusTransformerExtension(session: FirSession) : FirExtension(session) { @@ -34,7 +35,7 @@ abstract class FirStatusTransformerExtension(session: FirSession) : FirExtension open fun transformStatus( status: FirDeclarationStatus, property: FirProperty, - containingClass: FirClass?, + containingClass: FirClassLikeSymbol<*>?, isLocal: Boolean ): FirDeclarationStatus { return transformStatus(status, property) @@ -43,7 +44,7 @@ abstract class FirStatusTransformerExtension(session: FirSession) : FirExtension open fun transformStatus( status: FirDeclarationStatus, function: FirSimpleFunction, - containingClass: FirClass?, + containingClass: FirClassLikeSymbol<*>?, isLocal: Boolean ): FirDeclarationStatus { return transformStatus(status, function) @@ -52,7 +53,7 @@ abstract class FirStatusTransformerExtension(session: FirSession) : FirExtension open fun transformStatus( status: FirDeclarationStatus, regularClass: FirRegularClass, - containingClass: FirClass?, + containingClass: FirClassLikeSymbol<*>?, isLocal: Boolean ): FirDeclarationStatus { return transformStatus(status, regularClass) @@ -61,7 +62,7 @@ abstract class FirStatusTransformerExtension(session: FirSession) : FirExtension open fun transformStatus( status: FirDeclarationStatus, typeAlias: FirTypeAlias, - containingClass: FirClass?, + containingClass: FirClassLikeSymbol<*>?, isLocal: Boolean ): FirDeclarationStatus { return transformStatus(status, typeAlias) @@ -70,7 +71,7 @@ abstract class FirStatusTransformerExtension(session: FirSession) : FirExtension open fun transformStatus( status: FirDeclarationStatus, propertyAccessor: FirPropertyAccessor, - containingClass: FirClass?, + containingClass: FirClassLikeSymbol<*>?, containingProperty: FirProperty?, isLocal: Boolean ): FirDeclarationStatus { @@ -80,7 +81,7 @@ abstract class FirStatusTransformerExtension(session: FirSession) : FirExtension open fun transformStatus( status: FirDeclarationStatus, constructor: FirConstructor, - containingClass: FirClass?, + containingClass: FirClassLikeSymbol<*>?, isLocal: Boolean ): FirDeclarationStatus { return transformStatus(status, constructor) @@ -89,7 +90,7 @@ abstract class FirStatusTransformerExtension(session: FirSession) : FirExtension open fun transformStatus( status: FirDeclarationStatus, field: FirField, - containingClass: FirClass?, + containingClass: FirClassLikeSymbol<*>?, isLocal: Boolean ): FirDeclarationStatus { return transformStatus(status, field) @@ -98,7 +99,7 @@ abstract class FirStatusTransformerExtension(session: FirSession) : FirExtension open fun transformStatus( status: FirDeclarationStatus, backingField: FirBackingField, - containingClass: FirClass?, + containingClass: FirClassLikeSymbol<*>?, isLocal: Boolean ): FirDeclarationStatus { return transformStatus(status, backingField) @@ -107,7 +108,7 @@ abstract class FirStatusTransformerExtension(session: FirSession) : FirExtension open fun transformStatus( status: FirDeclarationStatus, enumEntry: FirEnumEntry, - containingClass: FirClass?, + containingClass: FirClassLikeSymbol<*>?, isLocal: Boolean ): FirDeclarationStatus { return transformStatus(status, enumEntry) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolver.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolver.kt index 0e19de5487b..06719d2d1fa 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolver.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolver.kt @@ -111,7 +111,7 @@ class FirStatusResolver( val statuses = overriddenStatuses ?: getOverriddenProperties(property, containingClass).map { it.status as FirResolvedDeclarationStatus } - val status = property.applyExtensionTransformers { transformStatus(it, property, containingClass, isLocal) } + val status = property.applyExtensionTransformers { transformStatus(it, property, containingClass?.symbol, isLocal) } return resolveStatus(property, status, containingClass, null, isLocal, statuses) } @@ -142,7 +142,9 @@ class FirStatusResolver( } fun resolveStatus(function: FirSimpleFunction, containingClass: FirClass?, isLocal: Boolean): FirResolvedDeclarationStatus { - val status = function.applyExtensionTransformers { transformStatus(it, function, containingClass, isLocal) } + val status = function.applyExtensionTransformers { + transformStatus(it, function, containingClass?.symbol, isLocal) + } val overriddenStatuses = getOverriddenStatuses(function, containingClass) return resolveStatus(function, status, containingClass, null, isLocal, overriddenStatuses) } @@ -153,7 +155,7 @@ class FirStatusResolver( isLocal: Boolean ): FirResolvedDeclarationStatus { val status = when (firClass) { - is FirRegularClass -> firClass.applyExtensionTransformers { transformStatus(it, firClass, containingClass, isLocal) } + is FirRegularClass -> firClass.applyExtensionTransformers { transformStatus(it, firClass, containingClass?.symbol, isLocal) } else -> firClass.status } return resolveStatus(firClass, status, containingClass, null, isLocal, emptyList()) @@ -164,7 +166,9 @@ class FirStatusResolver( containingClass: FirClass?, isLocal: Boolean ): FirResolvedDeclarationStatus { - val status = typeAlias.applyExtensionTransformers { transformStatus(it, typeAlias, containingClass, isLocal) } + val status = typeAlias.applyExtensionTransformers { + transformStatus(it, typeAlias, containingClass?.symbol, isLocal) + } return resolveStatus(typeAlias, status, containingClass, null, isLocal, emptyList()) } @@ -176,13 +180,15 @@ class FirStatusResolver( overriddenStatuses: List = emptyList(), ): FirResolvedDeclarationStatus { val status = propertyAccessor.applyExtensionTransformers { - transformStatus(it, propertyAccessor, containingClass, containingProperty, isLocal) + transformStatus(it, propertyAccessor, containingClass?.symbol, containingProperty, isLocal) } return resolveStatus(propertyAccessor, status, containingClass, containingProperty, isLocal, overriddenStatuses) } fun resolveStatus(constructor: FirConstructor, containingClass: FirClass?, isLocal: Boolean): FirResolvedDeclarationStatus { - val status = constructor.applyExtensionTransformers { transformStatus(it, constructor, containingClass, isLocal) } + val status = constructor.applyExtensionTransformers { + transformStatus(it, constructor, containingClass?.symbol, isLocal) + } return resolveStatus(constructor, status, containingClass, null, isLocal, emptyList()) } @@ -195,12 +201,16 @@ class FirStatusResolver( containingClass: FirClass?, isLocal: Boolean ): FirResolvedDeclarationStatus { - val status = backingField.applyExtensionTransformers { transformStatus(it, backingField, containingClass, isLocal) } + val status = backingField.applyExtensionTransformers { + transformStatus(it, backingField, containingClass?.symbol, isLocal) + } return resolveStatus(backingField, status, containingClass, null, isLocal, emptyList()) } fun resolveStatus(enumEntry: FirEnumEntry, containingClass: FirClass?, isLocal: Boolean): FirResolvedDeclarationStatus { - val status = enumEntry.applyExtensionTransformers { transformStatus(it, enumEntry, containingClass, isLocal) } + val status = enumEntry.applyExtensionTransformers { + transformStatus(it, enumEntry, containingClass?.symbol, isLocal) + } return resolveStatus(enumEntry, status, containingClass, null, isLocal, emptyList()) } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/synthetic/FirSyntheticProperty.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/synthetic/FirSyntheticProperty.kt index 187080b7d6f..1dee7daafa0 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/synthetic/FirSyntheticProperty.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/synthetic/FirSyntheticProperty.kt @@ -186,7 +186,11 @@ class FirSyntheticProperty( notSupported() } + override fun replaceStatus(newStatus: FirDeclarationStatus) { + notSupported() + } + private fun notSupported(): Nothing { - throw AssertionError("Transformation of synthetic property isn't supported") + error("Transformation of synthetic property isn't supported") } } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/synthetic/FirSyntheticPropertyAccessor.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/synthetic/FirSyntheticPropertyAccessor.kt index 8ad3cba63c7..2ebb8efda32 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/synthetic/FirSyntheticPropertyAccessor.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/synthetic/FirSyntheticPropertyAccessor.kt @@ -92,78 +92,86 @@ class FirSyntheticPropertyAccessor( } override fun replaceBody(newBody: FirBlock?) { - throw AssertionError("Transformation of synthetic property accessor isn't supported") + notSupported() } override fun transformChildren(transformer: FirTransformer, data: D): FirPropertyAccessorImpl { - throw AssertionError("Transformation of synthetic property accessor isn't supported") + notSupported() } override fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirPropertyAccessorImpl { - throw AssertionError("Transformation of synthetic property accessor isn't supported") + notSupported() } override fun transformReceiverParameter(transformer: FirTransformer, data: D): FirPropertyAccessorImpl { - throw AssertionError("Transformation of synthetic property accessor isn't supported") + notSupported() } override fun transformValueParameters(transformer: FirTransformer, data: D): FirPropertyAccessorImpl { - throw AssertionError("Transformation of synthetic property accessor isn't supported") + notSupported() } override fun transformContractDescription(transformer: FirTransformer, data: D): FirPropertyAccessorImpl { - throw AssertionError("Transformation of synthetic property accessor isn't supported") + notSupported() } override fun transformStatus(transformer: FirTransformer, data: D): FirPropertyAccessorImpl { - throw AssertionError("Transformation of synthetic property accessor isn't supported") + notSupported() } override fun transformAnnotations(transformer: FirTransformer, data: D): FirPropertyAccessor { - throw AssertionError("Transformation of synthetic property accessor isn't supported") + notSupported() } override fun transformBody(transformer: FirTransformer, data: D): FirPropertyAccessor { - throw AssertionError("Transformation of synthetic property accessor isn't supported") + notSupported() } override fun transformTypeParameters(transformer: FirTransformer, data: D): FirPropertyAccessor { - throw AssertionError("Transformation of synthetic property accessor isn't supported") + notSupported() } override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) { - throw AssertionError("Mutation of synthetic property accessor isn't supported") + notSupported() } override fun replaceReturnTypeRef(newReturnTypeRef: FirTypeRef) { - throw AssertionError("Mutation of synthetic property accessor isn't supported") + notSupported() } override fun replaceReceiverParameter(newReceiverParameter: FirReceiverParameter?) { - throw AssertionError("Mutation of synthetic property accessor isn't supported") + notSupported() } override fun replaceDeprecationsProvider(newDeprecationsProvider: DeprecationsProvider) { - throw AssertionError("Mutation of synthetic property accessor isn't supported") + notSupported() } override fun replaceValueParameters(newValueParameters: List) { - throw AssertionError("Mutation of synthetic property accessor isn't supported") + notSupported() } override fun replaceContractDescription(newContractDescription: FirContractDescription) { - throw AssertionError("Mutation of synthetic property accessor isn't supported") + notSupported() } override fun replaceControlFlowGraphReference(newControlFlowGraphReference: FirControlFlowGraphReference?) { - throw AssertionError("Mutation of synthetic property accessor isn't supported") + notSupported() } override fun replaceContextReceivers(newContextReceivers: List) { - throw AssertionError("Mutation of synthetic property accessor isn't supported") + notSupported() } override fun replaceAnnotations(newAnnotations: List) { - throw AssertionError("Mutation of synthetic property accessor isn't supported") + notSupported() + } + + override fun replaceStatus(newStatus: FirDeclarationStatus) { + notSupported() + } + + private fun notSupported(): Nothing { + error("Mutation of synthetic property accessor isn't supported") } }