[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.builder.toMutableOrEmpty
import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.FirConstExpression 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.expressions.impl.FirConstExpressionImpl
import org.jetbrains.kotlin.fir.types.constructClassLikeType import org.jetbrains.kotlin.fir.types.constructClassLikeType
import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.name.StandardClassIds
import org.jetbrains.kotlin.types.ConstantValueKind import org.jetbrains.kotlin.types.ConstantValueKind
@OptIn(UnresolvedExpressionTypeAccess::class)
fun <T> buildConstExpression( fun <T> buildConstExpression(
source: KtSourceElement?, source: KtSourceElement?,
kind: ConstantValueKind<T>, kind: ConstantValueKind<T>,
@@ -9,16 +9,19 @@ import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction
import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.FirAnonymousFunctionExpression 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.ConeKotlinType
import org.jetbrains.kotlin.fir.types.coneTypeOrNull import org.jetbrains.kotlin.fir.types.coneTypeOrNull
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.fir.visitors.FirVisitor
import org.jetbrains.kotlin.utils.addToStdlib.shouldNotBeCalled import org.jetbrains.kotlin.utils.addToStdlib.shouldNotBeCalled
@OptIn(UnresolvedExpressionTypeAccess::class)
internal class FirAnonymousFunctionExpressionImpl( internal class FirAnonymousFunctionExpressionImpl(
override val source: KtSourceElement?, override val source: KtSourceElement?,
override var anonymousFunction: FirAnonymousFunction override var anonymousFunction: FirAnonymousFunction
) : FirAnonymousFunctionExpression() { ) : FirAnonymousFunctionExpression() {
@UnresolvedExpressionTypeAccess
override val coneTypeOrNull: ConeKotlinType? override val coneTypeOrNull: ConeKotlinType?
get() = anonymousFunction.typeRef.coneTypeOrNull 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.declarations.FirAnonymousObject
import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.FirAnonymousObjectExpression 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.ConeKotlinType
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.fir.visitors.FirVisitor
@OptIn(UnresolvedExpressionTypeAccess::class)
internal class FirAnonymousObjectExpressionImpl( internal class FirAnonymousObjectExpressionImpl(
override val source: KtSourceElement?, override val source: KtSourceElement?,
@property:UnresolvedExpressionTypeAccess
override var coneTypeOrNull: ConeKotlinType?, override var coneTypeOrNull: ConeKotlinType?,
override var anonymousObject: FirAnonymousObject, override var anonymousObject: FirAnonymousObject,
) : FirAnonymousObjectExpression() { ) : FirAnonymousObjectExpression() {
@@ -10,10 +10,7 @@ import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.fakeElement import org.jetbrains.kotlin.fakeElement
import org.jetbrains.kotlin.fir.MutableOrEmptyList import org.jetbrains.kotlin.fir.MutableOrEmptyList
import org.jetbrains.kotlin.fir.builder.toMutableOrEmpty import org.jetbrains.kotlin.fir.builder.toMutableOrEmpty
import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.expressions.*
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.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImplWithoutSource import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImplWithoutSource
import org.jetbrains.kotlin.fir.types.FirTypeRef 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.transformInplace
import org.jetbrains.kotlin.fir.visitors.transformSingle import org.jetbrains.kotlin.fir.visitors.transformSingle
@OptIn(UnresolvedExpressionTypeAccess::class)
class FirContractCallBlock(var call: FirFunctionCall) : FirBlock() { class FirContractCallBlock(var call: FirFunctionCall) : FirBlock() {
override val source: KtSourceElement? override val source: KtSourceElement?
get() = call.source?.fakeElement(KtFakeSourceElementKind.ContractBlock) get() = call.source?.fakeElement(KtFakeSourceElementKind.ContractBlock)
@@ -31,6 +29,8 @@ class FirContractCallBlock(var call: FirFunctionCall) : FirBlock() {
override var annotations: MutableOrEmptyList<FirAnnotation> = MutableOrEmptyList.empty() override var annotations: MutableOrEmptyList<FirAnnotation> = MutableOrEmptyList.empty()
@UnresolvedExpressionTypeAccess
override var coneTypeOrNull: ConeKotlinType? = null override var coneTypeOrNull: ConeKotlinType? = null
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) { 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.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirBlock
import org.jetbrains.kotlin.fir.expressions.FirStatement 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.ConeKotlinType
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImplWithoutSource import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImplWithoutSource
import org.jetbrains.kotlin.fir.types.FirTypeRef 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.transformInplace
import org.jetbrains.kotlin.fir.visitors.transformSingle import org.jetbrains.kotlin.fir.visitors.transformSingle
@OptIn(UnresolvedExpressionTypeAccess::class)
class FirSingleExpressionBlock( class FirSingleExpressionBlock(
var statement: FirStatement var statement: FirStatement
) : FirBlock() { ) : FirBlock() {
@@ -28,6 +30,8 @@ class FirSingleExpressionBlock(
get() = statement.source?.fakeElement(KtFakeSourceElementKind.SingleExpressionBlock) get() = statement.source?.fakeElement(KtFakeSourceElementKind.SingleExpressionBlock)
override var annotations: MutableOrEmptyList<FirAnnotation> = MutableOrEmptyList.empty() override var annotations: MutableOrEmptyList<FirAnnotation> = MutableOrEmptyList.empty()
override val statements: List<FirStatement> get() = listOf(statement) override val statements: List<FirStatement> get() = listOf(statement)
@UnresolvedExpressionTypeAccess
override var coneTypeOrNull: ConeKotlinType? = null override var coneTypeOrNull: ConeKotlinType? = null
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) { override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
@@ -44,6 +48,7 @@ class FirSingleExpressionBlock(
override fun replaceConeTypeOrNull(newConeTypeOrNull: ConeKotlinType?) { override fun replaceConeTypeOrNull(newConeTypeOrNull: ConeKotlinType?) {
coneTypeOrNull = newConeTypeOrNull coneTypeOrNull = newConeTypeOrNull
} }
override fun <D> transformStatements(transformer: FirTransformer<D>, data: D): FirBlock { override fun <D> transformStatements(transformer: FirTransformer<D>, data: D): FirBlock {
statement = statement.transformSingle(transformer, data) statement = statement.transformSingle(transformer, data)
return this return this