Skip to content

Commit

Permalink
[FIR] Add isFoldedString property to FirStringConcatenationCall
Browse files Browse the repository at this point in the history
FirStringConcatenationCall can represent two language constructs:
1. String interpolation
2. String literals concatenations

The latter one is identified by isFoldedString property.
  • Loading branch information
TomatorCZ authored and Space Team committed Feb 13, 2025
1 parent 1d60469 commit ef33701
Show file tree
Hide file tree
Showing 6 changed files with 7 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -326,6 +326,7 @@ class LightTreeRawFirExpressionBuilder(
argumentList = buildArgumentList { arguments += output.asReversed().map { getAsFirExpression<FirExpression>(it) } }
source = binaryExpression.toFirSourceElement()
interpolationPrefix = ""
isFoldedStrings = true
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ abstract class FirStringConcatenationCall : FirExpression(), FirCall {
@UnresolvedExpressionTypeAccess
abstract override val coneTypeOrNull: ConeKotlinType?
abstract val interpolationPrefix: String
abstract val isFoldedStrings: Boolean

override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitStringConcatenationCall(this, data)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,15 @@ class FirStringConcatenationCallBuilder : FirCallBuilder, FirAnnotationContainer
override val annotations: MutableList<FirAnnotation> = mutableListOf()
override lateinit var argumentList: FirArgumentList
lateinit var interpolationPrefix: String
var isFoldedStrings: Boolean = false

override fun build(): FirStringConcatenationCall {
return FirStringConcatenationCallImpl(
source,
annotations.toMutableOrEmpty(),
argumentList,
interpolationPrefix,
isFoldedStrings,
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ internal class FirStringConcatenationCallImpl(
override var annotations: MutableOrEmptyList<FirAnnotation>,
override var argumentList: FirArgumentList,
override val interpolationPrefix: String,
override val isFoldedStrings: Boolean,
) : FirStringConcatenationCall() {
@OptIn(UnresolvedExpressionTypeAccess::class)
override val coneTypeOrNull: ConeKotlinType? = StandardClassIds.String.constructClassLikeType()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -279,6 +279,7 @@ class BuilderConfigurator(model: Model) : AbstractFirBuilderConfigurator<Abstrac

builder(stringConcatenationCall) {
parents += callBuilder
defaultFalse("isFoldedStrings")
}

builder(thisReceiverExpression) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1014,6 +1014,7 @@ object FirTree : AbstractFirTreeBuilder() {
parent(expression)

+field("interpolationPrefix", string)
+field("isFoldedStrings", boolean)
}

val throwExpression: Element by element(Expression) {
Expand Down

0 comments on commit ef33701

Please sign in to comment.