[FIR] Add fir node for raw contract description

This commit is contained in:
Dmitriy Novozhilov
2020-04-08 14:19:25 +03:00
parent ba272101f2
commit a89e0123c7
26 changed files with 212 additions and 27 deletions
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.FirImplementationDetail
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.contracts.impl.FirEmptyContractDescription
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.builder.FirSimpleFunctionBuilder
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
@@ -63,6 +64,7 @@ class FirJavaMethod @FirImplementationDetail constructor(
body,
status,
containerSource,
contractDescription = FirEmptyContractDescription,
name,
symbol,
annotations,
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.fir.deserialization
import org.jetbrains.kotlin.contracts.description.InvocationKind
import org.jetbrains.kotlin.fir.contracts.FirContractDescription
import org.jetbrains.kotlin.fir.contracts.builder.buildContractDescription
import org.jetbrains.kotlin.fir.contracts.builder.buildResolvedContractDescription
import org.jetbrains.kotlin.fir.contracts.description.*
import org.jetbrains.kotlin.fir.declarations.FirContractDescriptionOwner
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.utils.addIfNotNull
class FirContractDeserializer(private val c: FirDeserializationContext) {
fun loadContract(proto: ProtoBuf.Contract, owner: FirContractDescriptionOwner): FirContractDescription? {
val effects = proto.effectList.map { loadPossiblyConditionalEffect(it, owner) ?: return null }
return buildContractDescription {
return buildResolvedContractDescription {
this.effects += effects
}
}
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.resolve.dfa
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.contracts.FirResolvedContractDescription
import org.jetbrains.kotlin.fir.contracts.description.ConeBooleanConstantReference
import org.jetbrains.kotlin.fir.contracts.description.ConeConditionalEffectDeclaration
import org.jetbrains.kotlin.fir.contracts.description.ConeConstantReference
@@ -671,7 +672,10 @@ abstract class FirDataFlowAnalyzer<FLOW : Flow>(
}
private fun processConditionalContract(functionCall: FirFunctionCall) {
val contractDescription = (functionCall.symbol as? FirNamedFunctionSymbol)?.fir?.contractDescription ?: return
val contractDescription = (functionCall.symbol as? FirNamedFunctionSymbol)
?.fir
?.contractDescription as? FirResolvedContractDescription
?: return
val conditionalEffects = contractDescription.effects.filterIsInstance<ConeConditionalEffectDeclaration>()
if (conditionalEffects.isEmpty()) return
val argumentsMapping = createArgumentsMapping(functionCall) ?: return
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.resolve.transformers
import org.jetbrains.kotlin.contracts.description.InvocationKind
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.contracts.description.ConeCallsEffectDeclaration
import org.jetbrains.kotlin.fir.contracts.effects
import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
import org.jetbrains.kotlin.fir.declarations.isInline
@@ -62,7 +63,7 @@ object InvocationKindTransformer : FirTransformer<Nothing?>() {
val argumentMapping = calleeReference.candidate.argumentMapping ?: return functionCall.compose()
val function = calleeReference.candidateSymbol.fir as? FirSimpleFunction ?: return functionCall.compose()
val callsEffects = function.contractDescription.effects.filterIsInstance<ConeCallsEffectDeclaration>()
val callsEffects = function.contractDescription.effects?.filterIsInstance<ConeCallsEffectDeclaration>() ?: emptyList()
val isInline = function.isInline
if (callsEffects.isEmpty() && !isInline) {
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.descriptors.EffectiveVisibility
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.contracts.impl.FirEmptyContractDescription
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
@@ -113,6 +114,7 @@ class FirIntegerOperator @FirImplementationDetail constructor(
body = null,
status,
containerSource = null,
contractDescription = FirEmptyContractDescription,
kind.operatorName,
symbol,
annotations = mutableListOf(),
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.fir.contracts
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirPureAbstractElement
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.contracts.description.ConeEffectDeclaration
import org.jetbrains.kotlin.fir.visitors.*
/*
@@ -18,7 +17,6 @@ import org.jetbrains.kotlin.fir.visitors.*
abstract class FirContractDescription : FirPureAbstractElement(), FirElement {
abstract override val source: FirSourceElement?
abstract val effects: List<ConeEffectDeclaration>
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitContractDescription(this, data)
}
@@ -0,0 +1,22 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.fir.contracts
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
import org.jetbrains.kotlin.fir.visitors.*
/*
* This file was generated automatically
* DO NOT MODIFY IT MANUALLY
*/
abstract class FirRawContractDescription : FirContractDescription() {
abstract override val source: FirSourceElement?
abstract val contractCall: FirFunctionCall
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitRawContractDescription(this, data)
}
@@ -0,0 +1,22 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.fir.contracts
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.contracts.description.ConeEffectDeclaration
import org.jetbrains.kotlin.fir.visitors.*
/*
* This file was generated automatically
* DO NOT MODIFY IT MANUALLY
*/
abstract class FirResolvedContractDescription : FirContractDescription() {
abstract override val source: FirSourceElement?
abstract val effects: List<ConeEffectDeclaration>
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitResolvedContractDescription(this, data)
}
@@ -0,0 +1,41 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.fir.contracts.builder
import kotlin.contracts.*
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.contracts.FirRawContractDescription
import org.jetbrains.kotlin.fir.contracts.impl.FirRawContractDescriptionImpl
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
import org.jetbrains.kotlin.fir.visitors.*
/*
* This file was generated automatically
* DO NOT MODIFY IT MANUALLY
*/
@FirBuilderDsl
class FirRawContractDescriptionBuilder {
var source: FirSourceElement? = null
lateinit var contractCall: FirFunctionCall
fun build(): FirRawContractDescription {
return FirRawContractDescriptionImpl(
source,
contractCall,
)
}
}
@OptIn(ExperimentalContracts::class)
inline fun buildRawContractDescription(init: FirRawContractDescriptionBuilder.() -> Unit): FirRawContractDescription {
contract {
callsInPlace(init, kotlin.contracts.InvocationKind.EXACTLY_ONCE)
}
return FirRawContractDescriptionBuilder().apply(init).build()
}
@@ -8,9 +8,9 @@ package org.jetbrains.kotlin.fir.contracts.builder
import kotlin.contracts.*
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.contracts.FirContractDescription
import org.jetbrains.kotlin.fir.contracts.FirResolvedContractDescription
import org.jetbrains.kotlin.fir.contracts.description.ConeEffectDeclaration
import org.jetbrains.kotlin.fir.contracts.impl.FirContractDescriptionImpl
import org.jetbrains.kotlin.fir.contracts.impl.FirResolvedContractDescriptionImpl
import org.jetbrains.kotlin.fir.visitors.*
/*
@@ -19,12 +19,12 @@ import org.jetbrains.kotlin.fir.visitors.*
*/
@FirBuilderDsl
class FirContractDescriptionBuilder {
class FirResolvedContractDescriptionBuilder {
var source: FirSourceElement? = null
val effects: MutableList<ConeEffectDeclaration> = mutableListOf()
fun build(): FirContractDescription {
return FirContractDescriptionImpl(
fun build(): FirResolvedContractDescription {
return FirResolvedContractDescriptionImpl(
source,
effects,
)
@@ -33,9 +33,9 @@ class FirContractDescriptionBuilder {
}
@OptIn(ExperimentalContracts::class)
inline fun buildContractDescription(init: FirContractDescriptionBuilder.() -> Unit = {}): FirContractDescription {
inline fun buildResolvedContractDescription(init: FirResolvedContractDescriptionBuilder.() -> Unit = {}): FirResolvedContractDescription {
contract {
callsInPlace(init, kotlin.contracts.InvocationKind.EXACTLY_ONCE)
}
return FirContractDescriptionBuilder().apply(init).build()
return FirResolvedContractDescriptionBuilder().apply(init).build()
}
@@ -0,0 +1,30 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.fir.contracts.impl
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.contracts.FirRawContractDescription
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
import org.jetbrains.kotlin.fir.visitors.*
/*
* This file was generated automatically
* DO NOT MODIFY IT MANUALLY
*/
internal class FirRawContractDescriptionImpl(
override val source: FirSourceElement?,
override var contractCall: FirFunctionCall,
) : FirRawContractDescription() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
contractCall.accept(visitor, data)
}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirRawContractDescriptionImpl {
contractCall = contractCall.transformSingle(transformer, data)
return this
}
}
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.fir.contracts.impl
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.contracts.FirContractDescription
import org.jetbrains.kotlin.fir.contracts.FirResolvedContractDescription
import org.jetbrains.kotlin.fir.contracts.description.ConeEffectDeclaration
import org.jetbrains.kotlin.fir.visitors.*
@@ -15,13 +15,13 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
internal class FirContractDescriptionImpl(
internal class FirResolvedContractDescriptionImpl(
override val source: FirSourceElement?,
override val effects: MutableList<ConeEffectDeclaration>,
) : FirContractDescription() {
) : FirResolvedContractDescription() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirContractDescriptionImpl {
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirResolvedContractDescriptionImpl {
return this
}
}
@@ -42,6 +42,7 @@ class FirPropertyAccessorBuilder : FirFunctionBuilder, FirAnnotationContainerBui
override lateinit var returnTypeRef: FirTypeRef
override val valueParameters: MutableList<FirValueParameter> = mutableListOf()
override var body: FirBlock? = null
var contractDescription: FirContractDescription = FirEmptyContractDescription
lateinit var symbol: FirPropertyAccessorSymbol
var isGetter: Boolean by kotlin.properties.Delegates.notNull<Boolean>()
lateinit var status: FirDeclarationStatus
@@ -57,6 +58,7 @@ class FirPropertyAccessorBuilder : FirFunctionBuilder, FirAnnotationContainerBui
returnTypeRef,
valueParameters,
body,
contractDescription,
symbol,
isGetter,
status,
@@ -47,6 +47,7 @@ open class FirSimpleFunctionBuilder : FirFunctionBuilder, FirTypeParametersOwner
override var body: FirBlock? = null
open lateinit var status: FirDeclarationStatus
open var containerSource: DeserializedContainerSource? = null
open var contractDescription: FirContractDescription = FirEmptyContractDescription
open lateinit var name: Name
open lateinit var symbol: FirFunctionSymbol<FirSimpleFunction>
override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
@@ -64,6 +65,7 @@ open class FirSimpleFunctionBuilder : FirFunctionBuilder, FirTypeParametersOwner
body,
status,
containerSource,
contractDescription,
name,
symbol,
annotations,
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.fir.FirImplementationDetail
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.contracts.FirContractDescription
import org.jetbrains.kotlin.fir.contracts.impl.FirEmptyContractDescription
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
@@ -36,6 +35,7 @@ open class FirPropertyAccessorImpl @FirImplementationDetail constructor(
override var returnTypeRef: FirTypeRef,
override val valueParameters: MutableList<FirValueParameter>,
override var body: FirBlock?,
override var contractDescription: FirContractDescription,
override val symbol: FirPropertyAccessorSymbol,
override val isGetter: Boolean,
override var status: FirDeclarationStatus,
@@ -44,7 +44,6 @@ open class FirPropertyAccessorImpl @FirImplementationDetail constructor(
) : FirPropertyAccessor() {
override val receiverTypeRef: FirTypeRef? get() = null
override var controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference
override var contractDescription: FirContractDescription = FirEmptyContractDescription
override val isSetter: Boolean get() = !isGetter
init {
@@ -9,7 +9,6 @@ import org.jetbrains.kotlin.fir.FirImplementationDetail
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.contracts.FirContractDescription
import org.jetbrains.kotlin.fir.contracts.impl.FirEmptyContractDescription
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
@@ -40,13 +39,13 @@ open class FirSimpleFunctionImpl @FirImplementationDetail constructor(
override var body: FirBlock?,
override var status: FirDeclarationStatus,
override val containerSource: DeserializedContainerSource?,
override var contractDescription: FirContractDescription,
override val name: Name,
override val symbol: FirFunctionSymbol<FirSimpleFunction>,
override val annotations: MutableList<FirAnnotationCall>,
override val typeParameters: MutableList<FirTypeParameter>,
) : FirSimpleFunction() {
override var controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference
override var contractDescription: FirContractDescription = FirEmptyContractDescription
init {
symbol.bind(this)
@@ -122,6 +122,8 @@ import org.jetbrains.kotlin.fir.types.FirResolvedFunctionTypeRef
import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef
import org.jetbrains.kotlin.fir.types.FirComposedSuperTypeRef
import org.jetbrains.kotlin.fir.contracts.FirContractDescription
import org.jetbrains.kotlin.fir.contracts.FirRawContractDescription
import org.jetbrains.kotlin.fir.contracts.FirResolvedContractDescription
import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult
/*
@@ -597,6 +599,14 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
return transformElement(contractDescription, data)
}
open fun transformRawContractDescription(rawContractDescription: FirRawContractDescription, data: D): CompositeTransformResult<FirContractDescription> {
return transformElement(rawContractDescription, data)
}
open fun transformResolvedContractDescription(resolvedContractDescription: FirResolvedContractDescription, data: D): CompositeTransformResult<FirContractDescription> {
return transformElement(resolvedContractDescription, data)
}
final override fun visitElement(element: FirElement, data: D): CompositeTransformResult<FirElement> {
return transformElement(element, data)
}
@@ -1065,4 +1075,12 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
return transformContractDescription(contractDescription, data)
}
final override fun visitRawContractDescription(rawContractDescription: FirRawContractDescription, data: D): CompositeTransformResult<FirContractDescription> {
return transformRawContractDescription(rawContractDescription, data)
}
final override fun visitResolvedContractDescription(resolvedContractDescription: FirResolvedContractDescription, data: D): CompositeTransformResult<FirContractDescription> {
return transformResolvedContractDescription(resolvedContractDescription, data)
}
}
@@ -122,6 +122,8 @@ import org.jetbrains.kotlin.fir.types.FirResolvedFunctionTypeRef
import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef
import org.jetbrains.kotlin.fir.types.FirComposedSuperTypeRef
import org.jetbrains.kotlin.fir.contracts.FirContractDescription
import org.jetbrains.kotlin.fir.contracts.FirRawContractDescription
import org.jetbrains.kotlin.fir.contracts.FirResolvedContractDescription
/*
* This file was generated automatically
@@ -363,4 +365,8 @@ abstract class FirVisitor<out R, in D> {
open fun visitContractDescription(contractDescription: FirContractDescription, data: D): R = visitElement(contractDescription, data)
open fun visitRawContractDescription(rawContractDescription: FirRawContractDescription, data: D): R = visitElement(rawContractDescription, data)
open fun visitResolvedContractDescription(resolvedContractDescription: FirResolvedContractDescription, data: D): R = visitElement(resolvedContractDescription, data)
}
@@ -122,6 +122,8 @@ import org.jetbrains.kotlin.fir.types.FirResolvedFunctionTypeRef
import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef
import org.jetbrains.kotlin.fir.types.FirComposedSuperTypeRef
import org.jetbrains.kotlin.fir.contracts.FirContractDescription
import org.jetbrains.kotlin.fir.contracts.FirRawContractDescription
import org.jetbrains.kotlin.fir.contracts.FirResolvedContractDescription
/*
* This file was generated automatically
@@ -595,6 +597,14 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitElement(contractDescription)
}
open fun visitRawContractDescription(rawContractDescription: FirRawContractDescription) {
visitElement(rawContractDescription)
}
open fun visitResolvedContractDescription(resolvedContractDescription: FirResolvedContractDescription) {
visitElement(resolvedContractDescription)
}
final override fun visitElement(element: FirElement, data: Nothing?) {
visitElement(element)
}
@@ -1063,4 +1073,12 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitContractDescription(contractDescription)
}
final override fun visitRawContractDescription(rawContractDescription: FirRawContractDescription, data: Nothing?) {
visitRawContractDescription(rawContractDescription)
}
final override fun visitResolvedContractDescription(resolvedContractDescription: FirResolvedContractDescription, data: Nothing?) {
visitResolvedContractDescription(resolvedContractDescription)
}
}
@@ -0,0 +1,11 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.fir.contracts
import org.jetbrains.kotlin.fir.contracts.description.ConeEffectDeclaration
val FirContractDescription.effects: List<ConeEffectDeclaration>?
get() = (this as? FirResolvedContractDescription)?.effects
@@ -13,7 +13,6 @@ import org.jetbrains.kotlin.fir.visitors.FirVisitor
object FirEmptyContractDescription : FirContractDescription() {
override val source: FirSourceElement? get() = null
override val effects: List<ConeEffectDeclaration> get() = emptyList()
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.FirImplementationDetail
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.contracts.impl.FirEmptyContractDescription
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
import org.jetbrains.kotlin.fir.declarations.builder.buildDefaultSetterValueParameter
@@ -38,6 +39,7 @@ abstract class FirDefaultPropertyAccessor(
propertyTypeRef,
valueParameters,
body = null,
contractDescription = FirEmptyContractDescription,
symbol,
isGetter,
FirDeclarationStatusImpl(visibility, Modality.FINAL),
@@ -221,6 +221,8 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
builder(propertyAccessor) {
parents += functionBuilder
defaultNull("body")
default("contractDescription", "FirEmptyContractDescription")
useTypes(emptyContractDescriptionType)
}
builder(whenExpression) {
@@ -255,6 +257,8 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
parents += functionBuilder
parents += typeParametersOwnerBuilder
defaultNull("body")
default("contractDescription", "FirEmptyContractDescription")
useTypes(emptyContractDescriptionType)
openBuilder()
}
@@ -144,4 +144,6 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
val composedSuperTypeRef = element("ComposedSuperTypeRef", TypeRef, typeRef)
val contractDescription = element("ContractDescription", Contracts)
val rawContractDescription = element("RawContractDescription", Contracts, contractDescription)
val resolvedContractDescription = element("ResolvedContractDescription", Contracts, contractDescription)
}
@@ -294,8 +294,7 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
value = "!isGetter"
withGetter = true
}
default("contractDescription", "FirEmptyContractDescription")
useTypes(modalityType, emptyContractDescriptionType)
useTypes(modalityType)
kind = OpenClass
}
@@ -447,8 +446,6 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
impl(simpleFunction) {
kind = OpenClass
default("contractDescription", "FirEmptyContractDescription")
useTypes(emptyContractDescriptionType)
}
impl(delegatedTypeRef) {
@@ -576,7 +576,11 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
+field(varianceType)
}
contractDescription.configure {
rawContractDescription.configure {
+field("contractCall", functionCall)
}
resolvedContractDescription.configure {
+fieldList("effects", effectDeclarationType)
}
}