[FIR] Add fir node for raw contract description
This commit is contained in:
@@ -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,
|
||||
|
||||
+2
-2
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
+5
-1
@@ -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
|
||||
|
||||
+2
-1
@@ -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) {
|
||||
|
||||
+2
@@ -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)
|
||||
}
|
||||
+22
@@ -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)
|
||||
}
|
||||
+41
@@ -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()
|
||||
}
|
||||
+7
-7
@@ -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()
|
||||
}
|
||||
+30
@@ -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
|
||||
}
|
||||
}
|
||||
+4
-4
@@ -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
|
||||
}
|
||||
}
|
||||
+2
@@ -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,
|
||||
|
||||
+2
@@ -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,
|
||||
|
||||
+1
-2
@@ -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 {
|
||||
|
||||
+1
-2
@@ -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
|
||||
-1
@@ -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) {}
|
||||
|
||||
|
||||
+2
@@ -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),
|
||||
|
||||
+4
@@ -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()
|
||||
}
|
||||
|
||||
|
||||
+2
@@ -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)
|
||||
}
|
||||
|
||||
+1
-4
@@ -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) {
|
||||
|
||||
+5
-1
@@ -576,7 +576,11 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
||||
+field(varianceType)
|
||||
}
|
||||
|
||||
contractDescription.configure {
|
||||
rawContractDescription.configure {
|
||||
+field("contractCall", functionCall)
|
||||
}
|
||||
|
||||
resolvedContractDescription.configure {
|
||||
+fieldList("effects", effectDeclarationType)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user