[FIR] Make FirPropertyAccessor inherits FirCallableMemberDeclaration

This commit is contained in:
Dmitriy Novozhilov
2020-09-28 13:27:13 +03:00
parent 8f1062594f
commit 53a7d69ca6
11 changed files with 36 additions and 24 deletions
@@ -620,7 +620,7 @@ class FirDeclarationCompletionResultsWriter(private val finalSubstitutor: ConeSu
override fun transformPropertyAccessor(
propertyAccessor: FirPropertyAccessor,
data: Nothing?
): CompositeTransformResult<FirStatement> {
): CompositeTransformResult<FirDeclaration> {
propertyAccessor.transformReturnTypeRef(this, data)
propertyAccessor.transformValueParameters(this, data)
return propertyAccessor.compose()
@@ -109,10 +109,10 @@ class FirStatusResolveTransformer(
override fun transformPropertyAccessor(
propertyAccessor: FirPropertyAccessor,
data: FirDeclarationStatus?
): CompositeTransformResult<FirStatement> {
): CompositeTransformResult<FirDeclaration> {
propertyAccessor.transformStatus(this, propertyAccessor.resolveStatus(propertyAccessor.status, containingClass, isLocal = false))
@Suppress("UNCHECKED_CAST")
return transformDeclaration(propertyAccessor, data) as CompositeTransformResult<FirStatement>
return transformDeclaration(propertyAccessor, data)
}
override fun transformConstructor(
@@ -87,7 +87,7 @@ private class FirDeclarationsResolveTransformerForArgumentAnnotations(
override fun transformPropertyAccessor(
propertyAccessor: FirPropertyAccessor,
data: ResolutionMode
): CompositeTransformResult<FirStatement> {
): CompositeTransformResult<FirDeclaration> {
propertyAccessor.transformAnnotations(this, data)
return propertyAccessor.compose()
}
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.fir.expressions.FirBlock
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertyAccessorSymbol
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
import org.jetbrains.kotlin.fir.visitors.*
/*
@@ -21,7 +22,7 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
abstract class FirPropertyAccessor : FirPureAbstractElement(), FirFunction<FirPropertyAccessor>, FirContractDescriptionOwner, FirTypeParametersOwner {
abstract class FirPropertyAccessor : FirPureAbstractElement(), FirFunction<FirPropertyAccessor>, FirCallableMemberDeclaration<FirPropertyAccessor>, FirContractDescriptionOwner, FirTypeParametersOwner {
abstract override val source: FirSourceElement?
abstract override val session: FirSession
abstract override val resolvePhase: FirResolvePhase
@@ -32,11 +33,12 @@ abstract class FirPropertyAccessor : FirPureAbstractElement(), FirFunction<FirPr
abstract override val controlFlowGraphReference: FirControlFlowGraphReference?
abstract override val valueParameters: List<FirValueParameter>
abstract override val body: FirBlock?
abstract override val status: FirDeclarationStatus
abstract override val containerSource: DeserializedContainerSource?
abstract override val contractDescription: FirContractDescription
abstract override val symbol: FirPropertyAccessorSymbol
abstract val isGetter: Boolean
abstract val isSetter: Boolean
abstract val status: FirDeclarationStatus
abstract override val annotations: List<FirAnnotationCall>
abstract override val typeParameters: List<FirTypeParameter>
@@ -62,9 +64,9 @@ abstract class FirPropertyAccessor : FirPureAbstractElement(), FirFunction<FirPr
abstract override fun <D> transformBody(transformer: FirTransformer<D>, data: D): FirPropertyAccessor
abstract override fun <D> transformContractDescription(transformer: FirTransformer<D>, data: D): FirPropertyAccessor
abstract override fun <D> transformStatus(transformer: FirTransformer<D>, data: D): FirPropertyAccessor
abstract fun <D> transformStatus(transformer: FirTransformer<D>, data: D): FirPropertyAccessor
abstract override fun <D> transformContractDescription(transformer: FirTransformer<D>, data: D): FirPropertyAccessor
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirPropertyAccessor
@@ -29,6 +29,7 @@ import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertyAccessorSymbol
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.*
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
/*
* This file was generated automatically
@@ -44,10 +45,11 @@ class FirPropertyAccessorBuilder : FirFunctionBuilder, FirAnnotationContainerBui
override lateinit var returnTypeRef: FirTypeRef
override val valueParameters: MutableList<FirValueParameter> = mutableListOf()
override var body: FirBlock? = null
lateinit var status: FirDeclarationStatus
var containerSource: DeserializedContainerSource? = null
var contractDescription: FirContractDescription = FirEmptyContractDescription
lateinit var symbol: FirPropertyAccessorSymbol
var isGetter: Boolean by kotlin.properties.Delegates.notNull<Boolean>()
lateinit var status: FirDeclarationStatus
override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
val typeParameters: MutableList<FirTypeParameter> = mutableListOf()
@@ -61,10 +63,11 @@ class FirPropertyAccessorBuilder : FirFunctionBuilder, FirAnnotationContainerBui
returnTypeRef,
valueParameters,
body,
status,
containerSource,
contractDescription,
symbol,
isGetter,
status,
annotations,
typeParameters,
)
@@ -93,10 +96,11 @@ inline fun buildPropertyAccessorCopy(original: FirPropertyAccessor, init: FirPro
copyBuilder.returnTypeRef = original.returnTypeRef
copyBuilder.valueParameters.addAll(original.valueParameters)
copyBuilder.body = original.body
copyBuilder.status = original.status
copyBuilder.containerSource = original.containerSource
copyBuilder.contractDescription = original.contractDescription
copyBuilder.symbol = original.symbol
copyBuilder.isGetter = original.isGetter
copyBuilder.status = original.status
copyBuilder.annotations.addAll(original.annotations)
copyBuilder.typeParameters.addAll(original.typeParameters)
return copyBuilder.apply(init).build()
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.fir.expressions.FirBlock
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertyAccessorSymbol
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
import org.jetbrains.kotlin.fir.visitors.*
/*
@@ -37,10 +38,11 @@ open class FirPropertyAccessorImpl @FirImplementationDetail constructor(
override var returnTypeRef: FirTypeRef,
override val valueParameters: MutableList<FirValueParameter>,
override var body: FirBlock?,
override var status: FirDeclarationStatus,
override val containerSource: DeserializedContainerSource?,
override var contractDescription: FirContractDescription,
override val symbol: FirPropertyAccessorSymbol,
override val isGetter: Boolean,
override var status: FirDeclarationStatus,
override val annotations: MutableList<FirAnnotationCall>,
override val typeParameters: MutableList<FirTypeParameter>,
) : FirPropertyAccessor() {
@@ -58,8 +60,8 @@ open class FirPropertyAccessorImpl @FirImplementationDetail constructor(
controlFlowGraphReference?.accept(visitor, data)
valueParameters.forEach { it.accept(visitor, data) }
body?.accept(visitor, data)
contractDescription.accept(visitor, data)
status.accept(visitor, data)
contractDescription.accept(visitor, data)
annotations.forEach { it.accept(visitor, data) }
typeParameters.forEach { it.accept(visitor, data) }
}
@@ -69,8 +71,8 @@ open class FirPropertyAccessorImpl @FirImplementationDetail constructor(
controlFlowGraphReference = controlFlowGraphReference?.transformSingle(transformer, data)
transformValueParameters(transformer, data)
transformBody(transformer, data)
transformContractDescription(transformer, data)
transformStatus(transformer, data)
transformContractDescription(transformer, data)
transformAnnotations(transformer, data)
transformTypeParameters(transformer, data)
return this
@@ -95,13 +97,13 @@ open class FirPropertyAccessorImpl @FirImplementationDetail constructor(
return this
}
override fun <D> transformContractDescription(transformer: FirTransformer<D>, data: D): FirPropertyAccessorImpl {
contractDescription = contractDescription.transformSingle(transformer, data)
override fun <D> transformStatus(transformer: FirTransformer<D>, data: D): FirPropertyAccessorImpl {
status = status.transformSingle(transformer, data)
return this
}
override fun <D> transformStatus(transformer: FirTransformer<D>, data: D): FirPropertyAccessorImpl {
status = status.transformSingle(transformer, data)
override fun <D> transformContractDescription(transformer: FirTransformer<D>, data: D): FirPropertyAccessorImpl {
contractDescription = contractDescription.transformSingle(transformer, data)
return this
}
@@ -290,7 +290,7 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
return transformElement(simpleFunction, data)
}
open fun transformPropertyAccessor(propertyAccessor: FirPropertyAccessor, data: D): CompositeTransformResult<FirStatement> {
open fun transformPropertyAccessor(propertyAccessor: FirPropertyAccessor, data: D): CompositeTransformResult<FirDeclaration> {
return transformElement(propertyAccessor, data)
}
@@ -794,7 +794,7 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
return transformSimpleFunction(simpleFunction, data)
}
final override fun visitPropertyAccessor(propertyAccessor: FirPropertyAccessor, data: D): CompositeTransformResult<FirStatement> {
final override fun visitPropertyAccessor(propertyAccessor: FirPropertyAccessor, data: D): CompositeTransformResult<FirDeclaration> {
return transformPropertyAccessor(propertyAccessor, data)
}
@@ -42,10 +42,11 @@ abstract class FirDefaultPropertyAccessor(
propertyTypeRef,
valueParameters,
body = null,
FirDeclarationStatusImpl(visibility, Modality.FINAL),
containerSource = null,
contractDescription = FirEmptyContractDescription,
symbol,
isGetter,
FirDeclarationStatusImpl(visibility, Modality.FINAL),
annotations = mutableListOf(),
typeParameters = mutableListOf(),
) {
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirPropertyAccessorSymbol
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.FirVisitor
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
class FirSyntheticPropertyAccessor(
val delegate: FirSimpleFunction,
@@ -70,6 +71,8 @@ class FirSyntheticPropertyAccessor(
override val contractDescription: FirContractDescription = FirEmptyContractDescription
override val containerSource: DeserializedContainerSource? get() = null
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
delegate.accept(visitor, data)
controlFlowGraphReference?.accept(visitor, data)
@@ -135,4 +138,4 @@ class FirSyntheticPropertyAccessor(
override fun replaceControlFlowGraphReference(newControlFlowGraphReference: FirControlFlowGraphReference?) {
throw AssertionError("Mutation of synthetic property accessor isn't supported")
}
}
}
@@ -55,7 +55,7 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
val contractDescriptionOwner = element("ContractDescriptionOwner", Declaration)
val simpleFunction = element("SimpleFunction", Declaration, function, callableMemberDeclaration, contractDescriptionOwner, typeParametersOwner)
val propertyAccessor = element("PropertyAccessor", Declaration, function, contractDescriptionOwner, typeParametersOwner)
val propertyAccessor = element("PropertyAccessor", Declaration, function, callableMemberDeclaration, contractDescriptionOwner, typeParametersOwner)
val constructor = element("Constructor", Declaration, function, callableMemberDeclaration, typeParameterRefsOwner)
val file = element("File", Declaration, annotatedDeclaration)
@@ -318,10 +318,10 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
propertyAccessor.configure {
parentArg(function, "F", propertyAccessor)
parentArg(callableMemberDeclaration, "F", propertyAccessor)
+symbol("FirPropertyAccessorSymbol")
+booleanField("isGetter")
+booleanField("isSetter")
+status.withTransform()
+annotations
+typeParameters
}