diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java index 4905c5594ec..ebdff137523 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java @@ -23951,12 +23951,30 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia runTest("compiler/testData/diagnostics/tests/modifiers/const/arrayInAnnotationArgumentType.kt"); } + @Test + @TestMetadata("binaryLogic.kt") + public void testBinaryLogic() throws Exception { + runTest("compiler/testData/diagnostics/tests/modifiers/const/binaryLogic.kt"); + } + @Test @TestMetadata("compare.kt") public void testCompare() throws Exception { runTest("compiler/testData/diagnostics/tests/modifiers/const/compare.kt"); } + @Test + @TestMetadata("complexBooleanInStringConcat_after.kt") + public void testComplexBooleanInStringConcat_after() throws Exception { + runTest("compiler/testData/diagnostics/tests/modifiers/const/complexBooleanInStringConcat_after.kt"); + } + + @Test + @TestMetadata("complexBooleanInStringConcat_before.kt") + public void testComplexBooleanInStringConcat_before() throws Exception { + runTest("compiler/testData/diagnostics/tests/modifiers/const/complexBooleanInStringConcat_before.kt"); + } + @Test @TestMetadata("constInteraction.kt") public void testConstInteraction() throws Exception { diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java index a1569d8afa6..1c19601482b 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java @@ -23951,12 +23951,30 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated runTest("compiler/testData/diagnostics/tests/modifiers/const/arrayInAnnotationArgumentType.kt"); } + @Test + @TestMetadata("binaryLogic.kt") + public void testBinaryLogic() throws Exception { + runTest("compiler/testData/diagnostics/tests/modifiers/const/binaryLogic.kt"); + } + @Test @TestMetadata("compare.kt") public void testCompare() throws Exception { runTest("compiler/testData/diagnostics/tests/modifiers/const/compare.kt"); } + @Test + @TestMetadata("complexBooleanInStringConcat_after.kt") + public void testComplexBooleanInStringConcat_after() throws Exception { + runTest("compiler/testData/diagnostics/tests/modifiers/const/complexBooleanInStringConcat_after.kt"); + } + + @Test + @TestMetadata("complexBooleanInStringConcat_before.kt") + public void testComplexBooleanInStringConcat_before() throws Exception { + runTest("compiler/testData/diagnostics/tests/modifiers/const/complexBooleanInStringConcat_before.kt"); + } + @Test @TestMetadata("constInteraction.kt") public void testConstInteraction() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java index e4a44d5dba3..00c2ab35c8b 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java @@ -23945,12 +23945,30 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir runTest("compiler/testData/diagnostics/tests/modifiers/const/arrayInAnnotationArgumentType.kt"); } + @Test + @TestMetadata("binaryLogic.kt") + public void testBinaryLogic() throws Exception { + runTest("compiler/testData/diagnostics/tests/modifiers/const/binaryLogic.kt"); + } + @Test @TestMetadata("compare.kt") public void testCompare() throws Exception { runTest("compiler/testData/diagnostics/tests/modifiers/const/compare.kt"); } + @Test + @TestMetadata("complexBooleanInStringConcat_after.kt") + public void testComplexBooleanInStringConcat_after() throws Exception { + runTest("compiler/testData/diagnostics/tests/modifiers/const/complexBooleanInStringConcat_after.kt"); + } + + @Test + @TestMetadata("complexBooleanInStringConcat_before.kt") + public void testComplexBooleanInStringConcat_before() throws Exception { + runTest("compiler/testData/diagnostics/tests/modifiers/const/complexBooleanInStringConcat_before.kt"); + } + @Test @TestMetadata("constInteraction.kt") public void testConstInteraction() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java index 7ab64957205..3590aef7d24 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java @@ -23951,12 +23951,30 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia runTest("compiler/testData/diagnostics/tests/modifiers/const/arrayInAnnotationArgumentType.kt"); } + @Test + @TestMetadata("binaryLogic.kt") + public void testBinaryLogic() throws Exception { + runTest("compiler/testData/diagnostics/tests/modifiers/const/binaryLogic.kt"); + } + @Test @TestMetadata("compare.kt") public void testCompare() throws Exception { runTest("compiler/testData/diagnostics/tests/modifiers/const/compare.kt"); } + @Test + @TestMetadata("complexBooleanInStringConcat_after.kt") + public void testComplexBooleanInStringConcat_after() throws Exception { + runTest("compiler/testData/diagnostics/tests/modifiers/const/complexBooleanInStringConcat_after.kt"); + } + + @Test + @TestMetadata("complexBooleanInStringConcat_before.kt") + public void testComplexBooleanInStringConcat_before() throws Exception { + runTest("compiler/testData/diagnostics/tests/modifiers/const/complexBooleanInStringConcat_before.kt"); + } + @Test @TestMetadata("constInteraction.kt") public void testConstInteraction() throws Exception { diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirConstChecks.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirConstChecks.kt index a424e79b07a..e7c1ff17bfb 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirConstChecks.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirConstChecks.kt @@ -103,6 +103,10 @@ internal fun checkConstantArguments( checkConstantArguments(exp, session)?.let { return it } } } + expression is FirBinaryLogicExpression -> { + checkConstantArguments(expression.leftOperand, session)?.let { return it } + checkConstantArguments(expression.rightOperand, session)?.let { return it } + } expression is FirGetClassCall -> { var coneType = (expression as? FirCall)?.argument?.getExpandedType() diff --git a/compiler/testData/diagnostics/tests/modifiers/const/binaryLogic.fir.kt b/compiler/testData/diagnostics/tests/modifiers/const/binaryLogic.fir.kt new file mode 100644 index 00000000000..1c400e64d03 --- /dev/null +++ b/compiler/testData/diagnostics/tests/modifiers/const/binaryLogic.fir.kt @@ -0,0 +1,12 @@ +val nonConstBool = true +const val constBool = false + +const val andExpr1 = true && false +const val andExpr2 = nonConstBool && false +const val andExpr3 = true && constBool +const val andExpr4 = nonConstBool && constBool + +const val orExpr1 = true || false +const val orExpr2 = nonConstBool || false +const val orExpr3 = true || constBool +const val orExpr4 = nonConstBool || constBool diff --git a/compiler/testData/diagnostics/tests/modifiers/const/binaryLogic.kt b/compiler/testData/diagnostics/tests/modifiers/const/binaryLogic.kt new file mode 100644 index 00000000000..e68f5655580 --- /dev/null +++ b/compiler/testData/diagnostics/tests/modifiers/const/binaryLogic.kt @@ -0,0 +1,12 @@ +val nonConstBool = true +const val constBool = false + +const val andExpr1 = true && false +const val andExpr2 = nonConstBool && false +const val andExpr3 = true && constBool +const val andExpr4 = nonConstBool && constBool + +const val orExpr1 = true || false +const val orExpr2 = nonConstBool || false +const val orExpr3 = true || constBool +const val orExpr4 = nonConstBool || constBool diff --git a/compiler/testData/diagnostics/tests/modifiers/const/complexBooleanInStringConcat_after.fir.kt b/compiler/testData/diagnostics/tests/modifiers/const/complexBooleanInStringConcat_after.fir.kt new file mode 100644 index 00000000000..a9f42f601f6 --- /dev/null +++ b/compiler/testData/diagnostics/tests/modifiers/const/complexBooleanInStringConcat_after.fir.kt @@ -0,0 +1,8 @@ +// LANGUAGE: +ProhibitSimplificationOfNonTrivialConstBooleanExpressions + +val nonConstBool = true +const val constBool = false + +const val s1 = """ ${ true && false } """ +const val s2 = """ ${ nonConstBool && false } """ +const val s3 = """ ${ constBool && false } """ diff --git a/compiler/testData/diagnostics/tests/modifiers/const/complexBooleanInStringConcat_after.kt b/compiler/testData/diagnostics/tests/modifiers/const/complexBooleanInStringConcat_after.kt new file mode 100644 index 00000000000..c193f7926e0 --- /dev/null +++ b/compiler/testData/diagnostics/tests/modifiers/const/complexBooleanInStringConcat_after.kt @@ -0,0 +1,8 @@ +// LANGUAGE: +ProhibitSimplificationOfNonTrivialConstBooleanExpressions + +val nonConstBool = true +const val constBool = false + +const val s1 = """ ${ true && false } """ +const val s2 = """ ${ nonConstBool && false } """ +const val s3 = """ ${ constBool && false } """ diff --git a/compiler/testData/diagnostics/tests/modifiers/const/complexBooleanInStringConcat_before.fir.kt b/compiler/testData/diagnostics/tests/modifiers/const/complexBooleanInStringConcat_before.fir.kt new file mode 100644 index 00000000000..8b6c35f7f87 --- /dev/null +++ b/compiler/testData/diagnostics/tests/modifiers/const/complexBooleanInStringConcat_before.fir.kt @@ -0,0 +1,8 @@ +// LANGUAGE: -ProhibitSimplificationOfNonTrivialConstBooleanExpressions + +val nonConstBool = true +const val constBool = false + +const val s1 = """ ${ true && false } """ +const val s2 = """ ${ nonConstBool && false } """ +const val s3 = """ ${ constBool && false } """ diff --git a/compiler/testData/diagnostics/tests/modifiers/const/complexBooleanInStringConcat_before.kt b/compiler/testData/diagnostics/tests/modifiers/const/complexBooleanInStringConcat_before.kt new file mode 100644 index 00000000000..e98de25dd0b --- /dev/null +++ b/compiler/testData/diagnostics/tests/modifiers/const/complexBooleanInStringConcat_before.kt @@ -0,0 +1,8 @@ +// LANGUAGE: -ProhibitSimplificationOfNonTrivialConstBooleanExpressions + +val nonConstBool = true +const val constBool = false + +const val s1 = """ ${ true && false } """ +const val s2 = """ ${ nonConstBool && false } """ +const val s3 = """ ${ constBool && false } """ diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java index ed6d5c5b65d..aac271915d7 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java @@ -23951,12 +23951,30 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/modifiers/const/arrayInAnnotationArgumentType.kt"); } + @Test + @TestMetadata("binaryLogic.kt") + public void testBinaryLogic() throws Exception { + runTest("compiler/testData/diagnostics/tests/modifiers/const/binaryLogic.kt"); + } + @Test @TestMetadata("compare.kt") public void testCompare() throws Exception { runTest("compiler/testData/diagnostics/tests/modifiers/const/compare.kt"); } + @Test + @TestMetadata("complexBooleanInStringConcat_after.kt") + public void testComplexBooleanInStringConcat_after() throws Exception { + runTest("compiler/testData/diagnostics/tests/modifiers/const/complexBooleanInStringConcat_after.kt"); + } + + @Test + @TestMetadata("complexBooleanInStringConcat_before.kt") + public void testComplexBooleanInStringConcat_before() throws Exception { + runTest("compiler/testData/diagnostics/tests/modifiers/const/complexBooleanInStringConcat_before.kt"); + } + @Test @TestMetadata("constInteraction.kt") public void testConstInteraction() throws Exception {