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:
committed by
Space Team
parent
213967e25c
commit
53e89a9722
+5
-5
@@ -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>
|
||||
}
|
||||
+5
-5
@@ -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
|
||||
|
||||
+5
-5
@@ -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
|
||||
|
||||
+1
-1
@@ -411,7 +411,7 @@ object BuilderConfigurator : AbstractFirBuilderConfigurator<FirTreeBuilder>(FirT
|
||||
// useTypes(whenExpressionType)
|
||||
// }
|
||||
|
||||
noBuilder(constExpression)
|
||||
noBuilder(literalExpression)
|
||||
|
||||
builder(samConversionExpression) {
|
||||
withCopy()
|
||||
|
||||
+1
-1
@@ -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)
|
||||
|
||||
+1
-1
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user