[FIR] Fix Disappeared CONTRACT_NOT_ALLOWED

https://youtrack.jetbrains.com/issue/KT-60004/K2-Disappeared-CONTRACTNOTALLOWED

Merge-request: KT-MR-12613
Merged-by: Vladimir Sukharev <Vladimir.Sukharev@jetbrains.com>
This commit is contained in:
Vladimir Sukharev
2023-11-02 20:47:05 +00:00
committed by Space Team
parent 834927a901
commit 0fb853a995
25 changed files with 564 additions and 9 deletions
@@ -10,6 +10,7 @@ package org.jetbrains.kotlin.fir.contracts
import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.FirVisitor
@@ -20,6 +21,7 @@ import org.jetbrains.kotlin.fir.visitors.FirVisitor
abstract class FirLegacyRawContractDescription : FirContractDescription() {
abstract override val source: KtSourceElement?
abstract val contractCall: FirFunctionCall
abstract val diagnostic: ConeDiagnostic?
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitLegacyRawContractDescription(this, data)
@@ -10,6 +10,7 @@ package org.jetbrains.kotlin.fir.contracts
import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.FirVisitor
@@ -20,6 +21,7 @@ abstract class FirResolvedContractDescription : FirContractDescription() {
abstract override val source: KtSourceElement?
abstract val effects: List<FirEffectDeclaration>
abstract val unresolvedEffects: List<FirContractElementDeclaration>
abstract val diagnostic: ConeDiagnostic?
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitResolvedContractDescription(this, data)
@@ -15,17 +15,20 @@ import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.contracts.FirLegacyRawContractDescription
import org.jetbrains.kotlin.fir.contracts.impl.FirLegacyRawContractDescriptionImpl
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
@FirBuilderDsl
class FirLegacyRawContractDescriptionBuilder {
var source: KtSourceElement? = null
lateinit var contractCall: FirFunctionCall
var diagnostic: ConeDiagnostic? = null
fun build(): FirLegacyRawContractDescription {
return FirLegacyRawContractDescriptionImpl(
source,
contractCall,
diagnostic,
)
}
@@ -17,18 +17,21 @@ import org.jetbrains.kotlin.fir.contracts.FirContractElementDeclaration
import org.jetbrains.kotlin.fir.contracts.FirEffectDeclaration
import org.jetbrains.kotlin.fir.contracts.FirResolvedContractDescription
import org.jetbrains.kotlin.fir.contracts.impl.FirResolvedContractDescriptionImpl
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
@FirBuilderDsl
class FirResolvedContractDescriptionBuilder {
var source: KtSourceElement? = null
val effects: MutableList<FirEffectDeclaration> = mutableListOf()
val unresolvedEffects: MutableList<FirContractElementDeclaration> = mutableListOf()
var diagnostic: ConeDiagnostic? = null
fun build(): FirResolvedContractDescription {
return FirResolvedContractDescriptionImpl(
source,
effects,
unresolvedEffects,
diagnostic,
)
}
@@ -12,6 +12,7 @@ package org.jetbrains.kotlin.fir.contracts.impl
import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.fir.contracts.FirLegacyRawContractDescription
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.FirVisitor
@@ -19,6 +20,7 @@ import org.jetbrains.kotlin.fir.visitors.FirVisitor
internal class FirLegacyRawContractDescriptionImpl(
override val source: KtSourceElement?,
override var contractCall: FirFunctionCall,
override val diagnostic: ConeDiagnostic?,
) : FirLegacyRawContractDescription() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
contractCall.accept(visitor, data)
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.fir.contracts.FirContractElementDeclaration
import org.jetbrains.kotlin.fir.contracts.FirEffectDeclaration
import org.jetbrains.kotlin.fir.contracts.FirResolvedContractDescription
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.FirVisitor
import org.jetbrains.kotlin.fir.visitors.transformInplace
@@ -22,6 +23,7 @@ internal class FirResolvedContractDescriptionImpl(
override val source: KtSourceElement?,
override val effects: MutableList<FirEffectDeclaration>,
override val unresolvedEffects: MutableList<FirContractElementDeclaration>,
override val diagnostic: ConeDiagnostic?,
) : FirResolvedContractDescription() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
effects.forEach { it.accept(visitor, data) }