[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.FirSession
|
||||||
import org.jetbrains.kotlin.fir.FirSourceElement
|
import org.jetbrains.kotlin.fir.FirSourceElement
|
||||||
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
|
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.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.builder.FirSimpleFunctionBuilder
|
import org.jetbrains.kotlin.fir.declarations.builder.FirSimpleFunctionBuilder
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
|
||||||
@@ -63,6 +64,7 @@ class FirJavaMethod @FirImplementationDetail constructor(
|
|||||||
body,
|
body,
|
||||||
status,
|
status,
|
||||||
containerSource,
|
containerSource,
|
||||||
|
contractDescription = FirEmptyContractDescription,
|
||||||
name,
|
name,
|
||||||
symbol,
|
symbol,
|
||||||
annotations,
|
annotations,
|
||||||
|
|||||||
+2
-2
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.fir.deserialization
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.contracts.description.InvocationKind
|
import org.jetbrains.kotlin.contracts.description.InvocationKind
|
||||||
import org.jetbrains.kotlin.fir.contracts.FirContractDescription
|
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.contracts.description.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirContractDescriptionOwner
|
import org.jetbrains.kotlin.fir.declarations.FirContractDescriptionOwner
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
||||||
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.utils.addIfNotNull
|
|||||||
class FirContractDeserializer(private val c: FirDeserializationContext) {
|
class FirContractDeserializer(private val c: FirDeserializationContext) {
|
||||||
fun loadContract(proto: ProtoBuf.Contract, owner: FirContractDescriptionOwner): FirContractDescription? {
|
fun loadContract(proto: ProtoBuf.Contract, owner: FirContractDescriptionOwner): FirContractDescription? {
|
||||||
val effects = proto.effectList.map { loadPossiblyConditionalEffect(it, owner) ?: return null }
|
val effects = proto.effectList.map { loadPossiblyConditionalEffect(it, owner) ?: return null }
|
||||||
return buildContractDescription {
|
return buildResolvedContractDescription {
|
||||||
this.effects += effects
|
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.FirElement
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
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.ConeBooleanConstantReference
|
||||||
import org.jetbrains.kotlin.fir.contracts.description.ConeConditionalEffectDeclaration
|
import org.jetbrains.kotlin.fir.contracts.description.ConeConditionalEffectDeclaration
|
||||||
import org.jetbrains.kotlin.fir.contracts.description.ConeConstantReference
|
import org.jetbrains.kotlin.fir.contracts.description.ConeConstantReference
|
||||||
@@ -671,7 +672,10 @@ abstract class FirDataFlowAnalyzer<FLOW : Flow>(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun processConditionalContract(functionCall: FirFunctionCall) {
|
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>()
|
val conditionalEffects = contractDescription.effects.filterIsInstance<ConeConditionalEffectDeclaration>()
|
||||||
if (conditionalEffects.isEmpty()) return
|
if (conditionalEffects.isEmpty()) return
|
||||||
val argumentsMapping = createArgumentsMapping(functionCall) ?: 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.contracts.description.InvocationKind
|
||||||
import org.jetbrains.kotlin.fir.FirElement
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
import org.jetbrains.kotlin.fir.contracts.description.ConeCallsEffectDeclaration
|
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.FirAnonymousFunction
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
||||||
import org.jetbrains.kotlin.fir.declarations.isInline
|
import org.jetbrains.kotlin.fir.declarations.isInline
|
||||||
@@ -62,7 +63,7 @@ object InvocationKindTransformer : FirTransformer<Nothing?>() {
|
|||||||
val argumentMapping = calleeReference.candidate.argumentMapping ?: return functionCall.compose()
|
val argumentMapping = calleeReference.candidate.argumentMapping ?: return functionCall.compose()
|
||||||
val function = calleeReference.candidateSymbol.fir as? FirSimpleFunction ?: 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
|
val isInline = function.isInline
|
||||||
if (callsEffects.isEmpty() && !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.Modality
|
||||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||||
import org.jetbrains.kotlin.fir.*
|
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.FirDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
|
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||||
@@ -113,6 +114,7 @@ class FirIntegerOperator @FirImplementationDetail constructor(
|
|||||||
body = null,
|
body = null,
|
||||||
status,
|
status,
|
||||||
containerSource = null,
|
containerSource = null,
|
||||||
|
contractDescription = FirEmptyContractDescription,
|
||||||
kind.operatorName,
|
kind.operatorName,
|
||||||
symbol,
|
symbol,
|
||||||
annotations = mutableListOf(),
|
annotations = mutableListOf(),
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.fir.contracts
|
|||||||
import org.jetbrains.kotlin.fir.FirElement
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
import org.jetbrains.kotlin.fir.FirPureAbstractElement
|
import org.jetbrains.kotlin.fir.FirPureAbstractElement
|
||||||
import org.jetbrains.kotlin.fir.FirSourceElement
|
import org.jetbrains.kotlin.fir.FirSourceElement
|
||||||
import org.jetbrains.kotlin.fir.contracts.description.ConeEffectDeclaration
|
|
||||||
import org.jetbrains.kotlin.fir.visitors.*
|
import org.jetbrains.kotlin.fir.visitors.*
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -18,7 +17,6 @@ import org.jetbrains.kotlin.fir.visitors.*
|
|||||||
|
|
||||||
abstract class FirContractDescription : FirPureAbstractElement(), FirElement {
|
abstract class FirContractDescription : FirPureAbstractElement(), FirElement {
|
||||||
abstract override val source: FirSourceElement?
|
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)
|
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 kotlin.contracts.*
|
||||||
import org.jetbrains.kotlin.fir.FirSourceElement
|
import org.jetbrains.kotlin.fir.FirSourceElement
|
||||||
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
|
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.description.ConeEffectDeclaration
|
||||||
import org.jetbrains.kotlin.fir.contracts.impl.FirContractDescriptionImpl
|
import org.jetbrains.kotlin.fir.contracts.impl.FirResolvedContractDescriptionImpl
|
||||||
import org.jetbrains.kotlin.fir.visitors.*
|
import org.jetbrains.kotlin.fir.visitors.*
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -19,12 +19,12 @@ import org.jetbrains.kotlin.fir.visitors.*
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
@FirBuilderDsl
|
@FirBuilderDsl
|
||||||
class FirContractDescriptionBuilder {
|
class FirResolvedContractDescriptionBuilder {
|
||||||
var source: FirSourceElement? = null
|
var source: FirSourceElement? = null
|
||||||
val effects: MutableList<ConeEffectDeclaration> = mutableListOf()
|
val effects: MutableList<ConeEffectDeclaration> = mutableListOf()
|
||||||
|
|
||||||
fun build(): FirContractDescription {
|
fun build(): FirResolvedContractDescription {
|
||||||
return FirContractDescriptionImpl(
|
return FirResolvedContractDescriptionImpl(
|
||||||
source,
|
source,
|
||||||
effects,
|
effects,
|
||||||
)
|
)
|
||||||
@@ -33,9 +33,9 @@ class FirContractDescriptionBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@OptIn(ExperimentalContracts::class)
|
@OptIn(ExperimentalContracts::class)
|
||||||
inline fun buildContractDescription(init: FirContractDescriptionBuilder.() -> Unit = {}): FirContractDescription {
|
inline fun buildResolvedContractDescription(init: FirResolvedContractDescriptionBuilder.() -> Unit = {}): FirResolvedContractDescription {
|
||||||
contract {
|
contract {
|
||||||
callsInPlace(init, kotlin.contracts.InvocationKind.EXACTLY_ONCE)
|
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
|
package org.jetbrains.kotlin.fir.contracts.impl
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirSourceElement
|
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.contracts.description.ConeEffectDeclaration
|
||||||
import org.jetbrains.kotlin.fir.visitors.*
|
import org.jetbrains.kotlin.fir.visitors.*
|
||||||
|
|
||||||
@@ -15,13 +15,13 @@ import org.jetbrains.kotlin.fir.visitors.*
|
|||||||
* DO NOT MODIFY IT MANUALLY
|
* DO NOT MODIFY IT MANUALLY
|
||||||
*/
|
*/
|
||||||
|
|
||||||
internal class FirContractDescriptionImpl(
|
internal class FirResolvedContractDescriptionImpl(
|
||||||
override val source: FirSourceElement?,
|
override val source: FirSourceElement?,
|
||||||
override val effects: MutableList<ConeEffectDeclaration>,
|
override val effects: MutableList<ConeEffectDeclaration>,
|
||||||
) : FirContractDescription() {
|
) : FirResolvedContractDescription() {
|
||||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
|
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
|
return this
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+2
@@ -42,6 +42,7 @@ class FirPropertyAccessorBuilder : FirFunctionBuilder, FirAnnotationContainerBui
|
|||||||
override lateinit var returnTypeRef: FirTypeRef
|
override lateinit var returnTypeRef: FirTypeRef
|
||||||
override val valueParameters: MutableList<FirValueParameter> = mutableListOf()
|
override val valueParameters: MutableList<FirValueParameter> = mutableListOf()
|
||||||
override var body: FirBlock? = null
|
override var body: FirBlock? = null
|
||||||
|
var contractDescription: FirContractDescription = FirEmptyContractDescription
|
||||||
lateinit var symbol: FirPropertyAccessorSymbol
|
lateinit var symbol: FirPropertyAccessorSymbol
|
||||||
var isGetter: Boolean by kotlin.properties.Delegates.notNull<Boolean>()
|
var isGetter: Boolean by kotlin.properties.Delegates.notNull<Boolean>()
|
||||||
lateinit var status: FirDeclarationStatus
|
lateinit var status: FirDeclarationStatus
|
||||||
@@ -57,6 +58,7 @@ class FirPropertyAccessorBuilder : FirFunctionBuilder, FirAnnotationContainerBui
|
|||||||
returnTypeRef,
|
returnTypeRef,
|
||||||
valueParameters,
|
valueParameters,
|
||||||
body,
|
body,
|
||||||
|
contractDescription,
|
||||||
symbol,
|
symbol,
|
||||||
isGetter,
|
isGetter,
|
||||||
status,
|
status,
|
||||||
|
|||||||
+2
@@ -47,6 +47,7 @@ open class FirSimpleFunctionBuilder : FirFunctionBuilder, FirTypeParametersOwner
|
|||||||
override var body: FirBlock? = null
|
override var body: FirBlock? = null
|
||||||
open lateinit var status: FirDeclarationStatus
|
open lateinit var status: FirDeclarationStatus
|
||||||
open var containerSource: DeserializedContainerSource? = null
|
open var containerSource: DeserializedContainerSource? = null
|
||||||
|
open var contractDescription: FirContractDescription = FirEmptyContractDescription
|
||||||
open lateinit var name: Name
|
open lateinit var name: Name
|
||||||
open lateinit var symbol: FirFunctionSymbol<FirSimpleFunction>
|
open lateinit var symbol: FirFunctionSymbol<FirSimpleFunction>
|
||||||
override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
|
override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
|
||||||
@@ -64,6 +65,7 @@ open class FirSimpleFunctionBuilder : FirFunctionBuilder, FirTypeParametersOwner
|
|||||||
body,
|
body,
|
||||||
status,
|
status,
|
||||||
containerSource,
|
containerSource,
|
||||||
|
contractDescription,
|
||||||
name,
|
name,
|
||||||
symbol,
|
symbol,
|
||||||
annotations,
|
annotations,
|
||||||
|
|||||||
+1
-2
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.fir.FirImplementationDetail
|
|||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.FirSourceElement
|
import org.jetbrains.kotlin.fir.FirSourceElement
|
||||||
import org.jetbrains.kotlin.fir.contracts.FirContractDescription
|
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.FirDeclarationStatus
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
|
import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||||
@@ -36,6 +35,7 @@ open class FirPropertyAccessorImpl @FirImplementationDetail constructor(
|
|||||||
override var returnTypeRef: FirTypeRef,
|
override var returnTypeRef: FirTypeRef,
|
||||||
override val valueParameters: MutableList<FirValueParameter>,
|
override val valueParameters: MutableList<FirValueParameter>,
|
||||||
override var body: FirBlock?,
|
override var body: FirBlock?,
|
||||||
|
override var contractDescription: FirContractDescription,
|
||||||
override val symbol: FirPropertyAccessorSymbol,
|
override val symbol: FirPropertyAccessorSymbol,
|
||||||
override val isGetter: Boolean,
|
override val isGetter: Boolean,
|
||||||
override var status: FirDeclarationStatus,
|
override var status: FirDeclarationStatus,
|
||||||
@@ -44,7 +44,6 @@ open class FirPropertyAccessorImpl @FirImplementationDetail constructor(
|
|||||||
) : FirPropertyAccessor() {
|
) : FirPropertyAccessor() {
|
||||||
override val receiverTypeRef: FirTypeRef? get() = null
|
override val receiverTypeRef: FirTypeRef? get() = null
|
||||||
override var controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference
|
override var controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference
|
||||||
override var contractDescription: FirContractDescription = FirEmptyContractDescription
|
|
||||||
override val isSetter: Boolean get() = !isGetter
|
override val isSetter: Boolean get() = !isGetter
|
||||||
|
|
||||||
init {
|
init {
|
||||||
|
|||||||
+1
-2
@@ -9,7 +9,6 @@ import org.jetbrains.kotlin.fir.FirImplementationDetail
|
|||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.FirSourceElement
|
import org.jetbrains.kotlin.fir.FirSourceElement
|
||||||
import org.jetbrains.kotlin.fir.contracts.FirContractDescription
|
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.FirDeclarationStatus
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
||||||
@@ -40,13 +39,13 @@ open class FirSimpleFunctionImpl @FirImplementationDetail constructor(
|
|||||||
override var body: FirBlock?,
|
override var body: FirBlock?,
|
||||||
override var status: FirDeclarationStatus,
|
override var status: FirDeclarationStatus,
|
||||||
override val containerSource: DeserializedContainerSource?,
|
override val containerSource: DeserializedContainerSource?,
|
||||||
|
override var contractDescription: FirContractDescription,
|
||||||
override val name: Name,
|
override val name: Name,
|
||||||
override val symbol: FirFunctionSymbol<FirSimpleFunction>,
|
override val symbol: FirFunctionSymbol<FirSimpleFunction>,
|
||||||
override val annotations: MutableList<FirAnnotationCall>,
|
override val annotations: MutableList<FirAnnotationCall>,
|
||||||
override val typeParameters: MutableList<FirTypeParameter>,
|
override val typeParameters: MutableList<FirTypeParameter>,
|
||||||
) : FirSimpleFunction() {
|
) : FirSimpleFunction() {
|
||||||
override var controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference
|
override var controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference
|
||||||
override var contractDescription: FirContractDescription = FirEmptyContractDescription
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
symbol.bind(this)
|
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.FirImplicitTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.FirComposedSuperTypeRef
|
import org.jetbrains.kotlin.fir.types.FirComposedSuperTypeRef
|
||||||
import org.jetbrains.kotlin.fir.contracts.FirContractDescription
|
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
|
import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -597,6 +599,14 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
|||||||
return transformElement(contractDescription, data)
|
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> {
|
final override fun visitElement(element: FirElement, data: D): CompositeTransformResult<FirElement> {
|
||||||
return transformElement(element, data)
|
return transformElement(element, data)
|
||||||
}
|
}
|
||||||
@@ -1065,4 +1075,12 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
|||||||
return transformContractDescription(contractDescription, data)
|
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.FirImplicitTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.FirComposedSuperTypeRef
|
import org.jetbrains.kotlin.fir.types.FirComposedSuperTypeRef
|
||||||
import org.jetbrains.kotlin.fir.contracts.FirContractDescription
|
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
|
* 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 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.FirImplicitTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.FirComposedSuperTypeRef
|
import org.jetbrains.kotlin.fir.types.FirComposedSuperTypeRef
|
||||||
import org.jetbrains.kotlin.fir.contracts.FirContractDescription
|
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
|
* This file was generated automatically
|
||||||
@@ -595,6 +597,14 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
|||||||
visitElement(contractDescription)
|
visitElement(contractDescription)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open fun visitRawContractDescription(rawContractDescription: FirRawContractDescription) {
|
||||||
|
visitElement(rawContractDescription)
|
||||||
|
}
|
||||||
|
|
||||||
|
open fun visitResolvedContractDescription(resolvedContractDescription: FirResolvedContractDescription) {
|
||||||
|
visitElement(resolvedContractDescription)
|
||||||
|
}
|
||||||
|
|
||||||
final override fun visitElement(element: FirElement, data: Nothing?) {
|
final override fun visitElement(element: FirElement, data: Nothing?) {
|
||||||
visitElement(element)
|
visitElement(element)
|
||||||
}
|
}
|
||||||
@@ -1063,4 +1073,12 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
|||||||
visitContractDescription(contractDescription)
|
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() {
|
object FirEmptyContractDescription : FirContractDescription() {
|
||||||
override val source: FirSourceElement? get() = null
|
override val source: FirSourceElement? get() = null
|
||||||
override val effects: List<ConeEffectDeclaration> get() = emptyList()
|
|
||||||
|
|
||||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
|
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.FirImplementationDetail
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.FirSourceElement
|
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.FirResolvePhase
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||||
import org.jetbrains.kotlin.fir.declarations.builder.buildDefaultSetterValueParameter
|
import org.jetbrains.kotlin.fir.declarations.builder.buildDefaultSetterValueParameter
|
||||||
@@ -38,6 +39,7 @@ abstract class FirDefaultPropertyAccessor(
|
|||||||
propertyTypeRef,
|
propertyTypeRef,
|
||||||
valueParameters,
|
valueParameters,
|
||||||
body = null,
|
body = null,
|
||||||
|
contractDescription = FirEmptyContractDescription,
|
||||||
symbol,
|
symbol,
|
||||||
isGetter,
|
isGetter,
|
||||||
FirDeclarationStatusImpl(visibility, Modality.FINAL),
|
FirDeclarationStatusImpl(visibility, Modality.FINAL),
|
||||||
|
|||||||
+4
@@ -221,6 +221,8 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
|
|||||||
builder(propertyAccessor) {
|
builder(propertyAccessor) {
|
||||||
parents += functionBuilder
|
parents += functionBuilder
|
||||||
defaultNull("body")
|
defaultNull("body")
|
||||||
|
default("contractDescription", "FirEmptyContractDescription")
|
||||||
|
useTypes(emptyContractDescriptionType)
|
||||||
}
|
}
|
||||||
|
|
||||||
builder(whenExpression) {
|
builder(whenExpression) {
|
||||||
@@ -255,6 +257,8 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
|
|||||||
parents += functionBuilder
|
parents += functionBuilder
|
||||||
parents += typeParametersOwnerBuilder
|
parents += typeParametersOwnerBuilder
|
||||||
defaultNull("body")
|
defaultNull("body")
|
||||||
|
default("contractDescription", "FirEmptyContractDescription")
|
||||||
|
useTypes(emptyContractDescriptionType)
|
||||||
openBuilder()
|
openBuilder()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
@@ -144,4 +144,6 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
|
|||||||
val composedSuperTypeRef = element("ComposedSuperTypeRef", TypeRef, typeRef)
|
val composedSuperTypeRef = element("ComposedSuperTypeRef", TypeRef, typeRef)
|
||||||
|
|
||||||
val contractDescription = element("ContractDescription", Contracts)
|
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"
|
value = "!isGetter"
|
||||||
withGetter = true
|
withGetter = true
|
||||||
}
|
}
|
||||||
default("contractDescription", "FirEmptyContractDescription")
|
useTypes(modalityType)
|
||||||
useTypes(modalityType, emptyContractDescriptionType)
|
|
||||||
kind = OpenClass
|
kind = OpenClass
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -447,8 +446,6 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
|
|||||||
|
|
||||||
impl(simpleFunction) {
|
impl(simpleFunction) {
|
||||||
kind = OpenClass
|
kind = OpenClass
|
||||||
default("contractDescription", "FirEmptyContractDescription")
|
|
||||||
useTypes(emptyContractDescriptionType)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl(delegatedTypeRef) {
|
impl(delegatedTypeRef) {
|
||||||
|
|||||||
+5
-1
@@ -576,7 +576,11 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
|||||||
+field(varianceType)
|
+field(varianceType)
|
||||||
}
|
}
|
||||||
|
|
||||||
contractDescription.configure {
|
rawContractDescription.configure {
|
||||||
|
+field("contractCall", functionCall)
|
||||||
|
}
|
||||||
|
|
||||||
|
resolvedContractDescription.configure {
|
||||||
+fieldList("effects", effectDeclarationType)
|
+fieldList("effects", effectDeclarationType)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user