fixup! fix complex solution
diff --git a/compiler/fir/analysis-tests/testData/resolve/vfir/expressions/binaryOperators.fir.txt b/compiler/fir/analysis-tests/testData/resolve/vfir/expressions/binaryOperators.fir.txt
index 068e44c..3c42931 100644
--- a/compiler/fir/analysis-tests/testData/resolve/vfir/expressions/binaryOperators.fir.txt
+++ b/compiler/fir/analysis-tests/testData/resolve/vfir/expressions/binaryOperators.fir.txt
@@ -1,5 +1,6 @@
FILE: binaryOperators.kt
public final fun main(): R|kotlin/Unit| {
+ lval case0: R|kotlin/String| = String(\u0001\u0000\u0001\u0800)
lval case1: R|kotlin/String| = String(12)
lval case2: R|kotlin/String| = String(123)
lval case3: R|kotlin/String| = String(123)
diff --git a/compiler/fir/analysis-tests/testData/resolve/vfir/expressions/binaryOperators.kt b/compiler/fir/analysis-tests/testData/resolve/vfir/expressions/binaryOperators.kt
index bd16d8f..e5bcc0a 100644
--- a/compiler/fir/analysis-tests/testData/resolve/vfir/expressions/binaryOperators.kt
+++ b/compiler/fir/analysis-tests/testData/resolve/vfir/expressions/binaryOperators.kt
@@ -1,4 +1,5 @@
fun main() {
+ val case0 = "\u0001\u0000" + "\u0001\u0800"
val case1 = "1" + "2"
val case2 = "1" + "2" + "3"
val case3 = ("1" + "2") + "3"
diff --git a/compiler/fir/analysis-tests/testData/resolve/vfir/expressions/binaryOperators.vfir.txt b/compiler/fir/analysis-tests/testData/resolve/vfir/expressions/binaryOperators.vfir.txt
index 2ae280d..755867c 100644
--- a/compiler/fir/analysis-tests/testData/resolve/vfir/expressions/binaryOperators.vfir.txt
+++ b/compiler/fir/analysis-tests/testData/resolve/vfir/expressions/binaryOperators.vfir.txt
@@ -40,6 +40,13 @@
FirPropertyImpl
FirResolvedDeclarationStatusImpl
FirResolvedTypeRefImpl
+ FirLiteralExpressionImpl
+ FirDefaultPropertyBackingField
+ FirResolvedTypeRefImpl
+ FirResolvedDeclarationStatusImpl
+ FirPropertyImpl
+ FirResolvedDeclarationStatusImpl
+ FirResolvedTypeRefImpl
FirFunctionCallImpl
FirLiteralExpressionImpl
FirResolvedArgumentListImpl
diff --git a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/LightTreeRawFirExpressionBuilder.kt b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/LightTreeRawFirExpressionBuilder.kt
index 57b0146..38371fd 100644
--- a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/LightTreeRawFirExpressionBuilder.kt
+++ b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/LightTreeRawFirExpressionBuilder.kt
@@ -301,7 +301,11 @@
if (children.size == 1 && children[0]!!.tokenType == LITERAL_STRING_TEMPLATE_ENTRY && context.folder.canFold()) {
context.folder.fold(children[0]!!.asText)
return null
- } else {
+ } else if (context.folder.canFold() && children.all { it!!.tokenType == LITERAL_STRING_TEMPLATE_ENTRY || it.tokenType == ESCAPE_STRING_TEMPLATE_ENTRY }) {
+ children.forEach { context.folder.fold(it!!.asText) }
+ return null
+ }
+ else {
context.folder.disable()
return convertStringTemplate(expression)
}
diff --git a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/PsiRawFirBuilder.kt b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/PsiRawFirBuilder.kt
index 56a05fa..18559fe 100644
--- a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/PsiRawFirBuilder.kt
+++ b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/PsiRawFirBuilder.kt
@@ -10,6 +10,7 @@
import com.intellij.psi.util.PsiUtilCore.getElementType
import com.intellij.util.AstLoadingFilter
import org.jetbrains.kotlin.*
+import org.jetbrains.kotlin.KtNodeTypes.ESCAPE_STRING_TEMPLATE_ENTRY
import org.jetbrains.kotlin.KtNodeTypes.LITERAL_STRING_TEMPLATE_ENTRY
import org.jetbrains.kotlin.builtins.StandardNames
import org.jetbrains.kotlin.builtins.StandardNames.BACKING_FIELD
@@ -53,6 +54,8 @@
import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment
import org.jetbrains.kotlin.utils.exceptions.requireWithAttachment
import org.jetbrains.kotlin.utils.exceptions.withPsiEntry
+import kotlin.collections.all
+import kotlin.collections.forEach
open class PsiRawFirBuilder(
session: FirSession,
@@ -2904,6 +2907,10 @@
if (expression.entries.size == 1 && getElementType(expression.entries[0]) == LITERAL_STRING_TEMPLATE_ENTRY && context.folder.canFold()) {
context.folder.fold(expression.entries[0].asText)
return null
+ }
+ else if (context.folder.canFold() && expression.entries.all { getElementType(it).let { it == LITERAL_STRING_TEMPLATE_ENTRY || it == ESCAPE_STRING_TEMPLATE_ENTRY } }) {
+ expression.entries.forEach { context.folder.fold(it!!.asText) }
+ return null
} else {
context.folder.disable()
return expression.accept(this, data)