[FIR] Pass symbol of containing class to FirStatusTransformerExtension instead of fir node

This commit is contained in:
Dmitriy Novozhilov
2023-02-07 15:42:58 +02:00
committed by Space Team
parent 67c504e6f0
commit ff4c5c1d03
9 changed files with 80 additions and 37 deletions
@@ -144,6 +144,10 @@ class FirJavaClass @FirImplementationDetail internal constructor(
typeParameters.transformInplace(transformer, data)
return this
}
override fun replaceStatus(newStatus: FirDeclarationStatus) {
status = newStatus
}
}
@FirBuilderDsl
@@ -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
@@ -166,6 +166,10 @@ class FirJavaField @FirImplementationDetail constructor(
override fun replaceContextReceivers(newContextReceivers: List<FirContextReceiver>) {
error("Body cannot be replaced for FirJavaField")
}
override fun replaceStatus(newStatus: FirDeclarationStatus) {
status = newStatus
}
}
@FirBuilderDsl
@@ -184,6 +184,10 @@ class FirJavaMethod @FirImplementationDetail constructor(
override fun replaceContextReceivers(newContextReceivers: List<FirContextReceiver>) {
error("Body cannot be replaced for FirJavaMethod")
}
override fun replaceStatus(newStatus: FirDeclarationStatus) {
status = newStatus
}
}
val ALL_JAVA_OPERATION_NAMES =
@@ -196,6 +196,10 @@ class FirJavaValueParameter @FirImplementationDetail constructor(
override fun replaceContextReceivers(newContextReceivers: List<FirContextReceiver>) {
error("Body cannot be replaced for FirJavaValueParameter")
}
override fun replaceStatus(newStatus: FirDeclarationStatus) {
error("Status cannot be replaced for FirJavaValueParameter")
}
}
@FirBuilderDsl
@@ -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)
@@ -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<FirResolvedDeclarationStatus> = 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())
}
@@ -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")
}
}
@@ -92,78 +92,86 @@ class FirSyntheticPropertyAccessor(
}
override fun replaceBody(newBody: FirBlock?) {
throw AssertionError("Transformation of synthetic property accessor isn't supported")
notSupported()
}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirPropertyAccessorImpl {
throw AssertionError("Transformation of synthetic property accessor isn't supported")
notSupported()
}
override fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D): FirPropertyAccessorImpl {
throw AssertionError("Transformation of synthetic property accessor isn't supported")
notSupported()
}
override fun <D> transformReceiverParameter(transformer: FirTransformer<D>, data: D): FirPropertyAccessorImpl {
throw AssertionError("Transformation of synthetic property accessor isn't supported")
notSupported()
}
override fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirPropertyAccessorImpl {
throw AssertionError("Transformation of synthetic property accessor isn't supported")
notSupported()
}
override fun <D> transformContractDescription(transformer: FirTransformer<D>, data: D): FirPropertyAccessorImpl {
throw AssertionError("Transformation of synthetic property accessor isn't supported")
notSupported()
}
override fun <D> transformStatus(transformer: FirTransformer<D>, data: D): FirPropertyAccessorImpl {
throw AssertionError("Transformation of synthetic property accessor isn't supported")
notSupported()
}
override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirPropertyAccessor {
throw AssertionError("Transformation of synthetic property accessor isn't supported")
notSupported()
}
override fun <D> transformBody(transformer: FirTransformer<D>, data: D): FirPropertyAccessor {
throw AssertionError("Transformation of synthetic property accessor isn't supported")
notSupported()
}
override fun <D> transformTypeParameters(transformer: FirTransformer<D>, 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<FirValueParameter>) {
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<FirContextReceiver>) {
throw AssertionError("Mutation of synthetic property accessor isn't supported")
notSupported()
}
override fun replaceAnnotations(newAnnotations: List<FirAnnotation>) {
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")
}
}