K2. Minor. Rename FirConstExpression to FirLiteralExpression

FirConstExpression is usually confused with "constant" calculations,
while in fact, it just denotes a simple literal expression
and `1 + 1` isn't represented by a FirConstExpression.

^KT-64314 Fixed
This commit is contained in:
Simon Ogorodnik
2024-01-12 18:44:13 +01:00
committed by Space Team
parent 213967e25c
commit 53e89a9722
105 changed files with 300 additions and 295 deletions
@@ -16,9 +16,9 @@ import org.jetbrains.kotlin.fir.visitors.FirVisitor
import org.jetbrains.kotlin.types.ConstantValueKind
/**
* Generated from: [org.jetbrains.kotlin.fir.tree.generator.FirTreeBuilder.constExpression]
* Generated from: [org.jetbrains.kotlin.fir.tree.generator.FirTreeBuilder.literalExpression]
*/
abstract class FirConstExpression<T> : FirExpression() {
abstract class FirLiteralExpression<T> : FirExpression() {
abstract override val source: KtSourceElement?
@UnresolvedExpressionTypeAccess
abstract override val coneTypeOrNull: ConeKotlinType?
@@ -27,11 +27,11 @@ abstract class FirConstExpression<T> : FirExpression() {
abstract val value: T
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitConstExpression(this, data)
visitor.visitLiteralExpression(this, data)
@Suppress("UNCHECKED_CAST")
override fun <E : FirElement, D> transform(transformer: FirTransformer<D>, data: D): E =
transformer.transformConstExpression(this, data) as E
transformer.transformLiteralExpression(this, data) as E
abstract override fun replaceConeTypeOrNull(newConeTypeOrNull: ConeKotlinType?)
@@ -39,5 +39,5 @@ abstract class FirConstExpression<T> : FirExpression() {
abstract fun replaceKind(newKind: ConstantValueKind<T>)
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirConstExpression<T>
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirLiteralExpression<T>
}
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.KtSourceElement
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.FirConstExpression
import org.jetbrains.kotlin.fir.expressions.FirLiteralExpression
import org.jetbrains.kotlin.fir.expressions.UnresolvedExpressionTypeAccess
import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.visitors.FirTransformer
@@ -23,25 +23,25 @@ import org.jetbrains.kotlin.fir.visitors.transformInplace
import org.jetbrains.kotlin.types.ConstantValueKind
@OptIn(UnresolvedExpressionTypeAccess::class)
internal class FirConstExpressionImpl<T> (
internal class FirLiteralExpressionImpl<T> (
override val source: KtSourceElement?,
@property:UnresolvedExpressionTypeAccess
override var coneTypeOrNull: ConeKotlinType?,
override var annotations: MutableOrEmptyList<FirAnnotation>,
override var kind: ConstantValueKind<T>,
override val value: T,
) : FirConstExpression<T>() {
) : FirLiteralExpression<T>() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirConstExpressionImpl<T> {
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirLiteralExpressionImpl<T> {
transformAnnotations(transformer, data)
return this
}
override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirConstExpressionImpl<T> {
override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirLiteralExpressionImpl<T> {
annotations.transformInplace(transformer, data)
return this
}
@@ -101,8 +101,8 @@ abstract class FirDefaultVisitor<out R, in D> : FirVisitor<R, D>() {
override fun visitContinueExpression(continueExpression: FirContinueExpression, data: D): R =
visitLoopJump(continueExpression, data)
override fun <T> visitConstExpression(constExpression: FirConstExpression<T>, data: D): R =
visitExpression(constExpression, data)
override fun <T> visitLiteralExpression(literalExpression: FirLiteralExpression<T>, data: D): R =
visitExpression(literalExpression, data)
override fun visitStarProjection(starProjection: FirStarProjection, data: D): R =
visitTypeProjection(starProjection, data)
@@ -74,7 +74,7 @@ abstract class FirDefaultVisitorVoid : FirVisitorVoid() {
override fun visitContinueExpression(continueExpression: FirContinueExpression) = visitLoopJump(continueExpression)
override fun <T> visitConstExpression(constExpression: FirConstExpression<T>) = visitExpression(constExpression)
override fun <T> visitLiteralExpression(literalExpression: FirLiteralExpression<T>) = visitExpression(literalExpression)
override fun visitStarProjection(starProjection: FirStarProjection) = visitTypeProjection(starProjection)
@@ -555,12 +555,12 @@ abstract class FirTransformer<in D> : FirVisitor<FirElement, D>() {
return transformTryExpression(tryExpression, data)
}
open fun <T> transformConstExpression(constExpression: FirConstExpression<T>, data: D): FirStatement {
return transformElement(constExpression, data)
open fun <T> transformLiteralExpression(literalExpression: FirLiteralExpression<T>, data: D): FirStatement {
return transformElement(literalExpression, data)
}
final override fun <T> visitConstExpression(constExpression: FirConstExpression<T>, data: D): FirStatement {
return transformConstExpression(constExpression, data)
final override fun <T> visitLiteralExpression(literalExpression: FirLiteralExpression<T>, data: D): FirStatement {
return transformLiteralExpression(literalExpression, data)
}
open fun transformTypeProjection(typeProjection: FirTypeProjection, data: D): FirTypeProjection {
@@ -221,8 +221,8 @@ abstract class FirVisitor<out R, in D> {
open fun visitTryExpression(tryExpression: FirTryExpression, data: D): R =
visitElement(tryExpression, data)
open fun <T> visitConstExpression(constExpression: FirConstExpression<T>, data: D): R =
visitElement(constExpression, data)
open fun <T> visitLiteralExpression(literalExpression: FirLiteralExpression<T>, data: D): R =
visitElement(literalExpression, data)
open fun visitTypeProjection(typeProjection: FirTypeProjection, data: D): R =
visitElement(typeProjection, data)
@@ -555,12 +555,12 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitElement(tryExpression)
}
final override fun <T> visitConstExpression(constExpression: FirConstExpression<T>, data: Nothing?) {
visitConstExpression(constExpression)
final override fun <T> visitLiteralExpression(literalExpression: FirLiteralExpression<T>, data: Nothing?) {
visitLiteralExpression(literalExpression)
}
open fun <T> visitConstExpression(constExpression: FirConstExpression<T>) {
visitElement(constExpression)
open fun <T> visitLiteralExpression(literalExpression: FirLiteralExpression<T>) {
visitElement(literalExpression)
}
final override fun visitTypeProjection(typeProjection: FirTypeProjection, data: Nothing?) {
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
import org.jetbrains.kotlin.fir.declarations.utils.isStatic
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.expressions.builder.buildConstExpression
import org.jetbrains.kotlin.fir.expressions.builder.buildLiteralExpression
import org.jetbrains.kotlin.fir.expressions.builder.buildErrorExpression
import org.jetbrains.kotlin.fir.expressions.builder.buildErrorLoop
import org.jetbrains.kotlin.fir.expressions.impl.FirBlockImpl
@@ -34,7 +34,7 @@ inline val FirAnnotation.unexpandedClassId: ClassId?
fun <T> buildConstOrErrorExpression(source: KtSourceElement?, kind: ConstantValueKind<T>, value: T?, diagnostic: ConeDiagnostic): FirExpression =
value?.let {
buildConstExpression(source, kind, it, setType = false)
buildLiteralExpression(source, kind, it, setType = false)
} ?: buildErrorExpression {
this.source = source
this.diagnostic = diagnostic
@@ -8,22 +8,22 @@ package org.jetbrains.kotlin.fir.expressions.builder
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.FirLiteralExpression
import org.jetbrains.kotlin.fir.expressions.UnresolvedExpressionTypeAccess
import org.jetbrains.kotlin.fir.expressions.impl.FirConstExpressionImpl
import org.jetbrains.kotlin.fir.expressions.impl.FirLiteralExpressionImpl
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(
fun <T> buildLiteralExpression(
source: KtSourceElement?,
kind: ConstantValueKind<T>,
value: T,
annotations: MutableList<FirAnnotation> = mutableListOf(),
setType: Boolean
): FirConstExpression<T> {
return FirConstExpressionImpl(source, null, annotations.toMutableOrEmpty(), kind, value).also {
): FirLiteralExpression<T> {
return FirLiteralExpressionImpl(source, null, annotations.toMutableOrEmpty(), kind, value).also {
if (setType) {
when (kind) {
ConstantValueKind.Boolean -> it.coneTypeOrNull = StandardClassIds.Boolean.constructClassLikeType()
@@ -699,10 +699,10 @@ class FirRenderer(
print("LAZY_EXPRESSION")
}
override fun <T> visitConstExpression(constExpression: FirConstExpression<T>) {
annotationRenderer?.render(constExpression)
val kind = constExpression.kind
val value = constExpression.value
override fun <T> visitLiteralExpression(literalExpression: FirLiteralExpression<T>) {
annotationRenderer?.render(literalExpression)
val kind = literalExpression.kind
val value = literalExpression.value
print("$kind(")
if (value !is Char) {
print(value.toString())
@@ -85,7 +85,7 @@ val FirTypeRef.isArrayType: Boolean
|| StandardClassIds.unsignedArrayTypeByElementType.values.any { isBuiltinType(it, false) }
val FirExpression.isNullLiteral: Boolean
get() = this is FirConstExpression<*> &&
get() = this is FirLiteralExpression<*> &&
this.kind == ConstantValueKind.Null &&
this.value == null &&
this.source != null
@@ -411,7 +411,7 @@ object BuilderConfigurator : AbstractFirBuilderConfigurator<FirTreeBuilder>(FirT
// useTypes(whenExpressionType)
// }
noBuilder(constExpression)
noBuilder(literalExpression)
builder(samConversionExpression) {
withCopy()
@@ -95,7 +95,7 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
val continueExpression by element(Expression, loopJump)
val catchClause by element("Catch", Expression)
val tryExpression by element(Expression, expression, resolvable)
val constExpression by element(Expression, expression)
val literalExpression by element(Expression, expression)
val typeProjection by element(TypeRef)
val starProjection by element(TypeRef, typeProjection)
val placeholderProjection by element(TypeRef, typeProjection)
@@ -227,7 +227,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
+field("receiver", expression)
}
constExpression.configure {
literalExpression.configure {
val t = withArg("T")
+field("kind", constKindType.withArgs(t), withReplace = true)
+field("value", t)