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