[FIR] Update custom FIR implementations after FirExpression.coneTypeOrNull introduction

#KT-59855
This commit is contained in:
Kirill Rakhman
2023-08-04 10:38:38 +02:00
committed by Space Team
parent b24afa0177
commit 7223cd1bf3
10 changed files with 49 additions and 60 deletions
@@ -12,7 +12,7 @@ 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.impl.FirAnonymousFunctionExpressionImpl import org.jetbrains.kotlin.fir.expressions.impl.FirAnonymousFunctionExpressionImpl
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.ConeKotlinType
import kotlin.contracts.ExperimentalContracts import kotlin.contracts.ExperimentalContracts
import kotlin.contracts.InvocationKind import kotlin.contracts.InvocationKind
import kotlin.contracts.contract import kotlin.contracts.contract
@@ -29,9 +29,8 @@ class FirAnonymousFunctionExpressionBuilder : FirAnnotationContainerBuilder, Fir
) )
} }
@Deprecated("Modification of 'coneTypeOrNull' has no impact for FirAnonymousFunctionExpressionBuilder", level = DeprecationLevel.HIDDEN)
@Deprecated("Modification of 'typeRef' has no impact for FirAnonymousFunctionExpressionBuilder", level = DeprecationLevel.HIDDEN) override var coneTypeOrNull: ConeKotlinType?
override var typeRef: FirTypeRef
get() = throw IllegalStateException() get() = throw IllegalStateException()
set(_) { set(_) {
throw IllegalStateException() throw IllegalStateException()
@@ -12,8 +12,7 @@ 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.impl.FirAnonymousObjectExpressionImpl import org.jetbrains.kotlin.fir.expressions.impl.FirAnonymousObjectExpressionImpl
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImplWithoutSource import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.utils.addToStdlib.shouldNotBeCalled import org.jetbrains.kotlin.utils.addToStdlib.shouldNotBeCalled
import kotlin.contracts.ExperimentalContracts import kotlin.contracts.ExperimentalContracts
import kotlin.contracts.contract import kotlin.contracts.contract
@@ -21,7 +20,7 @@ import kotlin.contracts.contract
@FirBuilderDsl @FirBuilderDsl
class FirAnonymousObjectExpressionBuilder : FirAnnotationContainerBuilder, FirExpressionBuilder { class FirAnonymousObjectExpressionBuilder : FirAnnotationContainerBuilder, FirExpressionBuilder {
override var source: KtSourceElement? = null override var source: KtSourceElement? = null
override var typeRef: FirTypeRef = FirImplicitTypeRefImplWithoutSource override var coneTypeOrNull: ConeKotlinType? = null
lateinit var anonymousObject: FirAnonymousObject lateinit var anonymousObject: FirAnonymousObject
override val annotations: MutableList<FirAnnotation> override val annotations: MutableList<FirAnnotation>
@@ -30,7 +29,7 @@ class FirAnonymousObjectExpressionBuilder : FirAnnotationContainerBuilder, FirEx
override fun build(): FirAnonymousObjectExpression { override fun build(): FirAnonymousObjectExpression {
return FirAnonymousObjectExpressionImpl( return FirAnonymousObjectExpressionImpl(
source, source,
typeRef, coneTypeOrNull,
anonymousObject, anonymousObject,
) )
} }
@@ -10,7 +10,8 @@ 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.impl.FirConstExpressionImpl import org.jetbrains.kotlin.fir.expressions.impl.FirConstExpressionImpl
import org.jetbrains.kotlin.fir.types.impl.* import org.jetbrains.kotlin.fir.types.constructClassLikeType
import org.jetbrains.kotlin.name.StandardClassIds
import org.jetbrains.kotlin.types.ConstantValueKind import org.jetbrains.kotlin.types.ConstantValueKind
fun <T> buildConstExpression( fun <T> buildConstExpression(
@@ -20,23 +21,23 @@ fun <T> buildConstExpression(
annotations: MutableList<FirAnnotation> = mutableListOf(), annotations: MutableList<FirAnnotation> = mutableListOf(),
setType: Boolean setType: Boolean
): FirConstExpression<T> { ): FirConstExpression<T> {
return FirConstExpressionImpl(source, annotations.toMutableOrEmpty(), kind, value).also { return FirConstExpressionImpl(source, null, annotations.toMutableOrEmpty(), kind, value).also {
if (setType) { if (setType) {
when (kind) { when (kind) {
ConstantValueKind.Boolean -> it.typeRef = FirImplicitBooleanTypeRef(null) ConstantValueKind.Boolean -> it.type = StandardClassIds.Boolean.constructClassLikeType()
ConstantValueKind.Byte -> it.typeRef = FirImplicitByteTypeRef(null) ConstantValueKind.Byte -> it.type = StandardClassIds.Byte.constructClassLikeType()
ConstantValueKind.Char -> it.typeRef = FirImplicitCharTypeRef(null) ConstantValueKind.Char -> it.type = StandardClassIds.Char.constructClassLikeType()
ConstantValueKind.Double -> it.typeRef = FirImplicitDoubleTypeRef(null) ConstantValueKind.Double -> it.type = StandardClassIds.Double.constructClassLikeType()
ConstantValueKind.Float -> it.typeRef = FirImplicitFloatTypeRef(null) ConstantValueKind.Float -> it.type = StandardClassIds.Float.constructClassLikeType()
ConstantValueKind.Int -> it.typeRef = FirImplicitIntTypeRef(null) ConstantValueKind.Int -> it.type = StandardClassIds.Int.constructClassLikeType()
ConstantValueKind.Long -> it.typeRef = FirImplicitLongTypeRef(null) ConstantValueKind.Long -> it.type = StandardClassIds.Long.constructClassLikeType()
ConstantValueKind.Null -> it.typeRef = FirImplicitNullableAnyTypeRef(null) ConstantValueKind.Null -> it.type = StandardClassIds.Any.constructClassLikeType(isNullable = true)
ConstantValueKind.Short -> it.typeRef = FirImplicitShortTypeRef(null) ConstantValueKind.Short -> it.type = StandardClassIds.Short.constructClassLikeType()
ConstantValueKind.String -> it.typeRef = FirImplicitStringTypeRef(null) ConstantValueKind.String -> it.type = StandardClassIds.String.constructClassLikeType()
ConstantValueKind.UnsignedByte -> it.typeRef = FirImplicitUByteTypeRef(null) ConstantValueKind.UnsignedByte -> it.type = StandardClassIds.UByte.constructClassLikeType()
ConstantValueKind.UnsignedInt -> it.typeRef = FirImplicitUIntTypeRef(null) ConstantValueKind.UnsignedInt -> it.type = StandardClassIds.UInt.constructClassLikeType()
ConstantValueKind.UnsignedLong -> it.typeRef = FirImplicitULongTypeRef(null) ConstantValueKind.UnsignedLong -> it.type = StandardClassIds.ULong.constructClassLikeType()
ConstantValueKind.UnsignedShort -> it.typeRef = FirImplicitUShortTypeRef(null) ConstantValueKind.UnsignedShort -> it.type = StandardClassIds.UShort.constructClassLikeType()
ConstantValueKind.IntegerLiteral, ConstantValueKind.IntegerLiteral,
ConstantValueKind.UnsignedIntegerLiteral, ConstantValueKind.UnsignedIntegerLiteral,
ConstantValueKind.Error, ConstantValueKind.Error,
@@ -9,16 +9,18 @@ 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.types.FirTypeRef 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.FirTransformer
import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.fir.visitors.FirVisitor
import org.jetbrains.kotlin.utils.addToStdlib.shouldNotBeCalled
internal class FirAnonymousFunctionExpressionImpl( internal class FirAnonymousFunctionExpressionImpl(
override val source: KtSourceElement?, override val source: KtSourceElement?,
override var anonymousFunction: FirAnonymousFunction override var anonymousFunction: FirAnonymousFunction
) : FirAnonymousFunctionExpression() { ) : FirAnonymousFunctionExpression() {
override val typeRef: FirTypeRef override val coneTypeOrNull: ConeKotlinType?
get() = anonymousFunction.typeRef get() = anonymousFunction.typeRef.coneTypeOrNull
override val annotations: List<FirAnnotation> override val annotations: List<FirAnnotation>
get() = anonymousFunction.annotations get() = anonymousFunction.annotations
@@ -44,7 +46,7 @@ internal class FirAnonymousFunctionExpressionImpl(
return this return this
} }
override fun replaceTypeRef(newTypeRef: FirTypeRef) { override fun replaceConeTypeOrNull(newConeTypeOrNull: ConeKotlinType?) {
anonymousFunction.replaceTypeRef(newTypeRef) shouldNotBeCalled("anonymousFunction.replaceTypeRef() should be called instead")
} }
} }
@@ -9,30 +9,24 @@ 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.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
/*
* This file was generated automatically
* DO NOT MODIFY IT MANUALLY
*/
internal class FirAnonymousObjectExpressionImpl( internal class FirAnonymousObjectExpressionImpl(
override val source: KtSourceElement?, override val source: KtSourceElement?,
override var typeRef: FirTypeRef, override var coneTypeOrNull: ConeKotlinType?,
override var anonymousObject: FirAnonymousObject, override var anonymousObject: FirAnonymousObject,
) : FirAnonymousObjectExpression() { ) : FirAnonymousObjectExpression() {
override val annotations: List<FirAnnotation> override val annotations: List<FirAnnotation>
get() = anonymousObject.annotations get() = anonymousObject.annotations
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) { override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
typeRef.accept(visitor, data)
anonymousObject.accept(visitor, data) anonymousObject.accept(visitor, data)
} }
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirAnonymousObjectExpressionImpl { override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirAnonymousObjectExpressionImpl {
typeRef = typeRef.transform(transformer, data)
transformAnonymousObject(transformer, data) transformAnonymousObject(transformer, data)
return this return this
} }
@@ -50,7 +44,7 @@ internal class FirAnonymousObjectExpressionImpl(
return this return this
} }
override fun replaceTypeRef(newTypeRef: FirTypeRef) { override fun replaceConeTypeOrNull(newConeTypeOrNull: ConeKotlinType?) {
typeRef = newTypeRef coneTypeOrNull = newConeTypeOrNull
} }
} }
@@ -14,6 +14,7 @@ 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.FirFunctionCall import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
import org.jetbrains.kotlin.fir.expressions.FirStatement import org.jetbrains.kotlin.fir.expressions.FirStatement
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
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
@@ -28,12 +29,12 @@ class FirContractCallBlock(var call: FirFunctionCall) : FirBlock() {
override val statements: List<FirStatement> override val statements: List<FirStatement>
get() = listOf(call) get() = listOf(call)
override var annotations: MutableOrEmptyList<FirAnnotation> = MutableOrEmptyList.empty() override var annotations: MutableOrEmptyList<FirAnnotation> = MutableOrEmptyList.empty()
override var typeRef: FirTypeRef = FirImplicitTypeRefImplWithoutSource 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) {
call.accept(visitor, data) call.accept(visitor, data)
typeRef.accept(visitor, data)
} }
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirContractCallBlock { override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirContractCallBlock {
@@ -42,8 +43,8 @@ class FirContractCallBlock(var call: FirFunctionCall) : FirBlock() {
return this return this
} }
override fun replaceTypeRef(newTypeRef: FirTypeRef) { override fun replaceConeTypeOrNull(newConeTypeOrNull: ConeKotlinType?) {
typeRef = newTypeRef coneTypeOrNull = newConeTypeOrNull
} }
override fun <D> transformStatements(transformer: FirTransformer<D>, data: D): FirBlock { override fun <D> transformStatements(transformer: FirTransformer<D>, data: D): FirBlock {
@@ -52,7 +53,6 @@ class FirContractCallBlock(var call: FirFunctionCall) : FirBlock() {
} }
override fun <D> transformOtherChildren(transformer: FirTransformer<D>, data: D): FirBlock { override fun <D> transformOtherChildren(transformer: FirTransformer<D>, data: D): FirBlock {
typeRef = typeRef.transformSingle(transformer, data)
return this return this
} }
@@ -64,4 +64,6 @@ class FirContractCallBlock(var call: FirFunctionCall) : FirBlock() {
annotations.transformInplace(transformer, data) annotations.transformInplace(transformer, data)
return this return this
} }
} }
@@ -8,14 +8,13 @@ package org.jetbrains.kotlin.fir.expressions.impl
import org.jetbrains.kotlin.KtSourceElement import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImplWithoutSource 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.FirTransformer
import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.fir.visitors.FirVisitor
object FirNoReceiverExpression : FirExpression() { object FirNoReceiverExpression : FirExpression() {
override val source: KtSourceElement? get() = null override val source: KtSourceElement? get() = null
override val typeRef: FirTypeRef = FirImplicitTypeRefImplWithoutSource override val coneTypeOrNull: ConeKotlinType? get() = null
override val annotations: List<FirAnnotation> get() = emptyList() override val annotations: List<FirAnnotation> get() = emptyList()
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {} override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
@@ -32,5 +31,5 @@ object FirNoReceiverExpression : FirExpression() {
return this return this
} }
override fun replaceTypeRef(newTypeRef: FirTypeRef) {} override fun replaceConeTypeOrNull(newConeTypeOrNull: ConeKotlinType?) {}
} }
@@ -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.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
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
@@ -27,12 +28,11 @@ 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)
override var typeRef: FirTypeRef = FirImplicitTypeRefImplWithoutSource 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) {
annotations.forEach { it.accept(visitor, data) } annotations.forEach { it.accept(visitor, data) }
statement.accept(visitor, data) statement.accept(visitor, data)
typeRef.accept(visitor, data)
} }
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirSingleExpressionBlock { override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirSingleExpressionBlock {
@@ -41,10 +41,9 @@ class FirSingleExpressionBlock(
return this return this
} }
override fun replaceTypeRef(newTypeRef: FirTypeRef) { override fun replaceConeTypeOrNull(newConeTypeOrNull: ConeKotlinType?) {
typeRef = newTypeRef 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
@@ -52,7 +51,6 @@ class FirSingleExpressionBlock(
override fun <D> transformOtherChildren(transformer: FirTransformer<D>, data: D): FirBlock { override fun <D> transformOtherChildren(transformer: FirTransformer<D>, data: D): FirBlock {
transformAnnotations(transformer, data) transformAnnotations(transformer, data)
typeRef = typeRef.transformSingle(transformer, data)
return this return this
} }
@@ -22,18 +22,16 @@ internal class FirErrorTypeRefImpl(
override val type: ConeKotlinType, override val type: ConeKotlinType,
override var delegatedTypeRef: FirTypeRef?, override var delegatedTypeRef: FirTypeRef?,
override val diagnostic: ConeDiagnostic, override val diagnostic: ConeDiagnostic,
override val isFromStubType: Boolean = false,
override var partiallyResolvedTypeRef: FirTypeRef? = null, override var partiallyResolvedTypeRef: FirTypeRef? = null,
) : FirErrorTypeRef() { ) : FirErrorTypeRef() {
constructor( constructor(
source: KtSourceElement?, delegatedTypeRef: FirTypeRef?, diagnostic: ConeDiagnostic, source: KtSourceElement?, delegatedTypeRef: FirTypeRef?, diagnostic: ConeDiagnostic,
isFromStubType: Boolean = false, partiallyResolvedTypeRef: FirTypeRef? = null, partiallyResolvedTypeRef: FirTypeRef? = null,
) : this( ) : this(
source, source,
ConeErrorType(diagnostic), ConeErrorType(diagnostic),
delegatedTypeRef, delegatedTypeRef,
diagnostic, diagnostic,
isFromStubType,
partiallyResolvedTypeRef, partiallyResolvedTypeRef,
) )
@@ -28,9 +28,6 @@ sealed class FirImplicitBuiltinTypeRef(
override val delegatedTypeRef: FirTypeRef? override val delegatedTypeRef: FirTypeRef?
get() = null get() = null
override val isFromStubType: Boolean
get() = false
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): FirElement { override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {