[FIR] Update manual implementations of FirExpression

#KT-61367
This commit is contained in:
Kirill Rakhman
2023-09-08 17:35:13 +02:00
committed by Space Team
parent 68bc2be4c9
commit a49fdeb05b
5 changed files with 17 additions and 4 deletions
@@ -9,11 +9,13 @@ import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.fir.builder.toMutableOrEmpty
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.FirConstExpression
import org.jetbrains.kotlin.fir.expressions.UnresolvedExpressionTypeAccess
import org.jetbrains.kotlin.fir.expressions.impl.FirConstExpressionImpl
import org.jetbrains.kotlin.fir.types.constructClassLikeType
import org.jetbrains.kotlin.name.StandardClassIds
import org.jetbrains.kotlin.types.ConstantValueKind
@OptIn(UnresolvedExpressionTypeAccess::class)
fun <T> buildConstExpression(
source: KtSourceElement?,
kind: ConstantValueKind<T>,
@@ -9,16 +9,19 @@ import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.FirAnonymousFunctionExpression
import org.jetbrains.kotlin.fir.expressions.UnresolvedExpressionTypeAccess
import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.coneTypeOrNull
import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.FirVisitor
import org.jetbrains.kotlin.utils.addToStdlib.shouldNotBeCalled
@OptIn(UnresolvedExpressionTypeAccess::class)
internal class FirAnonymousFunctionExpressionImpl(
override val source: KtSourceElement?,
override var anonymousFunction: FirAnonymousFunction
) : FirAnonymousFunctionExpression() {
@UnresolvedExpressionTypeAccess
override val coneTypeOrNull: ConeKotlinType?
get() = anonymousFunction.typeRef.coneTypeOrNull
@@ -9,13 +9,16 @@ import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.fir.declarations.FirAnonymousObject
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.FirAnonymousObjectExpression
import org.jetbrains.kotlin.fir.expressions.UnresolvedExpressionTypeAccess
import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.FirVisitor
@OptIn(UnresolvedExpressionTypeAccess::class)
internal class FirAnonymousObjectExpressionImpl(
override val source: KtSourceElement?,
@property:UnresolvedExpressionTypeAccess
override var coneTypeOrNull: ConeKotlinType?,
override var anonymousObject: FirAnonymousObject,
) : FirAnonymousObjectExpression() {
@@ -10,10 +10,7 @@ import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.fakeElement
import org.jetbrains.kotlin.fir.MutableOrEmptyList
import org.jetbrains.kotlin.fir.builder.toMutableOrEmpty
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.FirBlock
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
import org.jetbrains.kotlin.fir.expressions.FirStatement
import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImplWithoutSource
import org.jetbrains.kotlin.fir.types.FirTypeRef
@@ -22,6 +19,7 @@ import org.jetbrains.kotlin.fir.visitors.FirVisitor
import org.jetbrains.kotlin.fir.visitors.transformInplace
import org.jetbrains.kotlin.fir.visitors.transformSingle
@OptIn(UnresolvedExpressionTypeAccess::class)
class FirContractCallBlock(var call: FirFunctionCall) : FirBlock() {
override val source: KtSourceElement?
get() = call.source?.fakeElement(KtFakeSourceElementKind.ContractBlock)
@@ -31,6 +29,8 @@ class FirContractCallBlock(var call: FirFunctionCall) : FirBlock() {
override var annotations: MutableOrEmptyList<FirAnnotation> = MutableOrEmptyList.empty()
@UnresolvedExpressionTypeAccess
override var coneTypeOrNull: ConeKotlinType? = null
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.fir.builder.toMutableOrEmpty
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.FirBlock
import org.jetbrains.kotlin.fir.expressions.FirStatement
import org.jetbrains.kotlin.fir.expressions.UnresolvedExpressionTypeAccess
import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImplWithoutSource
import org.jetbrains.kotlin.fir.types.FirTypeRef
@@ -21,6 +22,7 @@ import org.jetbrains.kotlin.fir.visitors.FirVisitor
import org.jetbrains.kotlin.fir.visitors.transformInplace
import org.jetbrains.kotlin.fir.visitors.transformSingle
@OptIn(UnresolvedExpressionTypeAccess::class)
class FirSingleExpressionBlock(
var statement: FirStatement
) : FirBlock() {
@@ -28,6 +30,8 @@ class FirSingleExpressionBlock(
get() = statement.source?.fakeElement(KtFakeSourceElementKind.SingleExpressionBlock)
override var annotations: MutableOrEmptyList<FirAnnotation> = MutableOrEmptyList.empty()
override val statements: List<FirStatement> get() = listOf(statement)
@UnresolvedExpressionTypeAccess
override var coneTypeOrNull: ConeKotlinType? = null
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
@@ -44,6 +48,7 @@ class FirSingleExpressionBlock(
override fun replaceConeTypeOrNull(newConeTypeOrNull: ConeKotlinType?) {
coneTypeOrNull = newConeTypeOrNull
}
override fun <D> transformStatements(transformer: FirTransformer<D>, data: D): FirBlock {
statement = statement.transformSingle(transformer, data)
return this