From dd7fc7f4ae0e96a6e1772bfdbd8bcda2860514e8 Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Thu, 15 Sep 2022 13:16:19 -0700 Subject: [PATCH] AA FIR: avoid unsafe argument retrieval during const evaluation --- ...duleCompileTimeConstantEvaluatorTestGenerated.java | 6 ++++++ .../fir/evaluate/FirCompileTimeConstantEvaluator.kt | 3 ++- ...duleCompileTimeConstantEvaluatorTestGenerated.java | 6 ++++++ ...duleCompileTimeConstantEvaluatorTestGenerated.java | 6 ++++++ ...duleCompileTimeConstantEvaluatorTestGenerated.java | 6 ++++++ .../evaluate/string_trimIndent.kt | 5 +++++ .../evaluate/string_trimIndent.txt | 11 +++++++++++ 7 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 analysis/analysis-api/testData/components/compileTimeConstantProvider/evaluate/string_trimIndent.kt create mode 100644 analysis/analysis-api/testData/components/compileTimeConstantProvider/evaluate/string_trimIndent.txt diff --git a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/compileTimeConstantProvider/Fe10IdeNormalAnalysisSourceModuleCompileTimeConstantEvaluatorTestGenerated.java b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/compileTimeConstantProvider/Fe10IdeNormalAnalysisSourceModuleCompileTimeConstantEvaluatorTestGenerated.java index a4654103a3a..3721757b16f 100644 --- a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/compileTimeConstantProvider/Fe10IdeNormalAnalysisSourceModuleCompileTimeConstantEvaluatorTestGenerated.java +++ b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/compileTimeConstantProvider/Fe10IdeNormalAnalysisSourceModuleCompileTimeConstantEvaluatorTestGenerated.java @@ -225,4 +225,10 @@ public class Fe10IdeNormalAnalysisSourceModuleCompileTimeConstantEvaluatorTestGe public void testString_toString() throws Exception { runTest("analysis/analysis-api/testData/components/compileTimeConstantProvider/evaluate/string_toString.kt"); } + + @Test + @TestMetadata("string_trimIndent.kt") + public void testString_trimIndent() throws Exception { + runTest("analysis/analysis-api/testData/components/compileTimeConstantProvider/evaluate/string_trimIndent.kt"); + } } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/evaluate/FirCompileTimeConstantEvaluator.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/evaluate/FirCompileTimeConstantEvaluator.kt index 20321cf7a7c..3305290fc57 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/evaluate/FirCompileTimeConstantEvaluator.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/evaluate/FirCompileTimeConstantEvaluator.kt @@ -135,7 +135,8 @@ internal object FirCompileTimeConstantEvaluator { return it.adjustType(functionCall.typeRef) } - val opr2 = evaluate(functionCall.argument, mode) ?: return null + val argument = functionCall.arguments.firstOrNull() ?: return null + val opr2 = evaluate(argument, mode) ?: return null opr1.evaluate(function, opr2)?.let { return it.adjustType(functionCall.typeRef) } diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/compileTimeConstantProvider/FirIdeDependentAnalysisSourceModuleCompileTimeConstantEvaluatorTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/compileTimeConstantProvider/FirIdeDependentAnalysisSourceModuleCompileTimeConstantEvaluatorTestGenerated.java index 317f264a17a..5c13a174303 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/compileTimeConstantProvider/FirIdeDependentAnalysisSourceModuleCompileTimeConstantEvaluatorTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/compileTimeConstantProvider/FirIdeDependentAnalysisSourceModuleCompileTimeConstantEvaluatorTestGenerated.java @@ -225,4 +225,10 @@ public class FirIdeDependentAnalysisSourceModuleCompileTimeConstantEvaluatorTest public void testString_toString() throws Exception { runTest("analysis/analysis-api/testData/components/compileTimeConstantProvider/evaluate/string_toString.kt"); } + + @Test + @TestMetadata("string_trimIndent.kt") + public void testString_trimIndent() throws Exception { + runTest("analysis/analysis-api/testData/components/compileTimeConstantProvider/evaluate/string_trimIndent.kt"); + } } diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/compileTimeConstantProvider/FirIdeNormalAnalysisSourceModuleCompileTimeConstantEvaluatorTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/compileTimeConstantProvider/FirIdeNormalAnalysisSourceModuleCompileTimeConstantEvaluatorTestGenerated.java index 69757c16404..e3bf1330348 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/compileTimeConstantProvider/FirIdeNormalAnalysisSourceModuleCompileTimeConstantEvaluatorTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/compileTimeConstantProvider/FirIdeNormalAnalysisSourceModuleCompileTimeConstantEvaluatorTestGenerated.java @@ -225,4 +225,10 @@ public class FirIdeNormalAnalysisSourceModuleCompileTimeConstantEvaluatorTestGen public void testString_toString() throws Exception { runTest("analysis/analysis-api/testData/components/compileTimeConstantProvider/evaluate/string_toString.kt"); } + + @Test + @TestMetadata("string_trimIndent.kt") + public void testString_trimIndent() throws Exception { + runTest("analysis/analysis-api/testData/components/compileTimeConstantProvider/evaluate/string_trimIndent.kt"); + } } diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/compileTimeConstantProvider/FirStandaloneNormalAnalysisSourceModuleCompileTimeConstantEvaluatorTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/compileTimeConstantProvider/FirStandaloneNormalAnalysisSourceModuleCompileTimeConstantEvaluatorTestGenerated.java index a42fd889b66..8e9c56311ec 100644 --- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/compileTimeConstantProvider/FirStandaloneNormalAnalysisSourceModuleCompileTimeConstantEvaluatorTestGenerated.java +++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/compileTimeConstantProvider/FirStandaloneNormalAnalysisSourceModuleCompileTimeConstantEvaluatorTestGenerated.java @@ -225,4 +225,10 @@ public class FirStandaloneNormalAnalysisSourceModuleCompileTimeConstantEvaluator public void testString_toString() throws Exception { runTest("analysis/analysis-api/testData/components/compileTimeConstantProvider/evaluate/string_toString.kt"); } + + @Test + @TestMetadata("string_trimIndent.kt") + public void testString_trimIndent() throws Exception { + runTest("analysis/analysis-api/testData/components/compileTimeConstantProvider/evaluate/string_trimIndent.kt"); + } } diff --git a/analysis/analysis-api/testData/components/compileTimeConstantProvider/evaluate/string_trimIndent.kt b/analysis/analysis-api/testData/components/compileTimeConstantProvider/evaluate/string_trimIndent.kt new file mode 100644 index 00000000000..c1f06fa0666 --- /dev/null +++ b/analysis/analysis-api/testData/components/compileTimeConstantProvider/evaluate/string_trimIndent.kt @@ -0,0 +1,5 @@ +// WITH_STDLIB + +const val CODE = """ + const val CODE = "const val CODE = ..." +""".trimIndent() \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/compileTimeConstantProvider/evaluate/string_trimIndent.txt b/analysis/analysis-api/testData/components/compileTimeConstantProvider/evaluate/string_trimIndent.txt new file mode 100644 index 00000000000..ee8f58a1952 --- /dev/null +++ b/analysis/analysis-api/testData/components/compileTimeConstantProvider/evaluate/string_trimIndent.txt @@ -0,0 +1,11 @@ +expression: """ + const val CODE = "const val CODE = ..." +""".trimIndent() + +CONSTANT_EXPRESSION_EVALUATION +constant: NOT_EVALUATED +constantValueKind: NOT_EVALUATED + +CONSTANT_LIKE_EXPRESSION_EVALUATION +constantLike: NOT_EVALUATED +constantLikeValueKind: NOT_EVALUATED