From 6ee4b5e39380f96308d328e66ccd63d4f6469817 Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Mon, 27 Jan 2020 17:06:45 +0900 Subject: [PATCH] Condition of 'if' expression is constant: don't report when condition has named reference #KT-27651 Fixed --- .../idea/inspections/ConstantConditionIfInspection.kt | 6 ++---- .../inspectionsLocal/constantConditionIf/constant.kt | 7 +++++++ .../idea/inspections/LocalInspectionTestGenerated.java | 5 +++++ 3 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 idea/testData/inspectionsLocal/constantConditionIf/constant.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/ConstantConditionIfInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/ConstantConditionIfInspection.kt index 600496d38c1..68d8a3562f5 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/ConstantConditionIfInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/ConstantConditionIfInspection.kt @@ -22,10 +22,7 @@ import org.jetbrains.kotlin.idea.references.mainReference import org.jetbrains.kotlin.idea.util.hasNoSideEffects import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.psi.psiUtil.containingClass -import org.jetbrains.kotlin.psi.psiUtil.getChildrenOfType -import org.jetbrains.kotlin.psi.psiUtil.getParentOfType -import org.jetbrains.kotlin.psi.psiUtil.startOffset +import org.jetbrains.kotlin.psi.psiUtil.* import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.bindingContextUtil.isUsedAsExpression import org.jetbrains.kotlin.resolve.calls.callUtil.getType @@ -133,6 +130,7 @@ private fun KtExpression.constantBooleanValue(context: BindingContext): Boolean? if (enumEntriesComparison != null) { return enumEntriesComparison } + if (anyDescendantOfType { true }) return null val type = getType(context) ?: return null val constantValue = ConstantExpressionEvaluator.getConstant(this, context)?.toConstantValue(type) return constantValue?.value as? Boolean diff --git a/idea/testData/inspectionsLocal/constantConditionIf/constant.kt b/idea/testData/inspectionsLocal/constantConditionIf/constant.kt new file mode 100644 index 00000000000..354906e1c49 --- /dev/null +++ b/idea/testData/inspectionsLocal/constantConditionIf/constant.kt @@ -0,0 +1,7 @@ +// PROBLEM: none +const val s = "debug" + +fun main() { + if (s == "debug") { + } +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java index 6ed77b40014..2fc40321bf9 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java @@ -2480,6 +2480,11 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest { KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("idea/testData/inspectionsLocal/constantConditionIf"), Pattern.compile("^([\\w\\-_]+)\\.(kt|kts)$"), null, true); } + @TestMetadata("constant.kt") + public void testConstant() throws Exception { + runTest("idea/testData/inspectionsLocal/constantConditionIf/constant.kt"); + } + @TestMetadata("delete.kt") public void testDelete() throws Exception { runTest("idea/testData/inspectionsLocal/constantConditionIf/delete.kt");