[AA-FIR] Add support for constant evaluation of string templates.

Support FirStringConcatenationCall in FirCompileTimeConstantEvaluator.
This allows string templates ("foo${bar}") to be evaluated as constants,
assuming the interpolated expressions are themselves constant.

In addition, fixes some handling bugs with KtConstantEvaluationMode,
where some expressions that are not valid in a `const val` declaration
were being supported for `CONSTANT_EXPRESSION_EVALUATION`, including
non-static final Java fields in FIR, and composite expressions of
non-const properties in FE1.0.
This commit is contained in:
Justin Paupore
2023-02-13 20:16:15 -08:00
committed by Ilya Kirillov
parent 0193c83b05
commit fa517180b7
12 changed files with 100 additions and 23 deletions
@@ -1,8 +1,8 @@
expression: Build.VERSION_CODES().CUPCAKE
CONSTANT_EXPRESSION_EVALUATION
constant: 3
constantValueKind: Int
constant: NOT_EVALUATED
constantValueKind: NOT_EVALUATED
CONSTANT_LIKE_EXPRESSION_EVALUATION
constantLike: 3
@@ -1,9 +0,0 @@
expression: 42 / d
CONSTANT_EXPRESSION_EVALUATION
constant: 42
constantValueKind: Int
CONSTANT_LIKE_EXPRESSION_EVALUATION
constantLike: 42
constantLikeValueKind: Int
@@ -0,0 +1,4 @@
const val QUESTION = "the ultimate question of life, the universe, and everything"
const val ANSWER = 42
val MESSAGE = <expr>"The answer to ${QUESTION} is ${ANSWER}."</expr>
@@ -0,0 +1,9 @@
expression: "The answer to ${QUESTION} is ${ANSWER}."
CONSTANT_EXPRESSION_EVALUATION
constant: "The answer to the ultimate question of life, the universe, and everything is 42."
constantValueKind: String
CONSTANT_LIKE_EXPRESSION_EVALUATION
constantLike: "The answer to the ultimate question of life, the universe, and everything is 42."
constantLikeValueKind: String
@@ -0,0 +1,5 @@
val QUESTION = "the ultimate question of life, the universe, and everything"
val ANSWER = 42
val QUESTION_MEANING = null
val MESSAGE = <expr>"The answer to ${QUESTION} is ${ANSWER}. The question is: ${QUESTION_MEANING}"</expr>
@@ -0,0 +1,9 @@
expression: "The answer to ${QUESTION} is ${ANSWER}. The question is: ${QUESTION_MEANING}"
CONSTANT_EXPRESSION_EVALUATION
constant: NOT_EVALUATED
constantValueKind: NOT_EVALUATED
CONSTANT_LIKE_EXPRESSION_EVALUATION
constantLike: "The answer to the ultimate question of life, the universe, and everything is 42. The question is: null"
constantLikeValueKind: String