From 14d9bd485258acf7288f7e27241bbc2b727359a2 Mon Sep 17 00:00:00 2001 From: Andrey Cherkasov Date: Fri, 10 Oct 2025 17:43:51 +0400 Subject: [PATCH] [kotlin] KTIJ-30904 Fix false positive in `KotlinConstantConditionsInspection` for qualified constants GitOrigin-RevId: 116902b3da8b68d3a36c74ecadea341dfa286933 --- .../dfa/KotlinConstantConditionsInspection.kt | 15 ++++----------- .../testData/inspections/dfa/Suppressions.kt | 9 +++++++++ .../testData/inspections/dfa/SuppressionsK2.kt | 9 +++++++++ 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/plugins/kotlin/code-insight/inspections-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/inspections/dfa/KotlinConstantConditionsInspection.kt b/plugins/kotlin/code-insight/inspections-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/inspections/dfa/KotlinConstantConditionsInspection.kt index 3b60af48d56d..d0ff6cd8a679 100644 --- a/plugins/kotlin/code-insight/inspections-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/inspections/dfa/KotlinConstantConditionsInspection.kt +++ b/plugins/kotlin/code-insight/inspections-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/inspections/dfa/KotlinConstantConditionsInspection.kt @@ -31,15 +31,7 @@ import com.intellij.util.ThreeState import org.jetbrains.kotlin.analysis.api.KaExperimentalApi import org.jetbrains.kotlin.analysis.api.KaSession import org.jetbrains.kotlin.analysis.api.analyze -import org.jetbrains.kotlin.analysis.api.components.KaDiagnosticCheckerFilter -import org.jetbrains.kotlin.analysis.api.components.evaluate -import org.jetbrains.kotlin.analysis.api.components.expectedType -import org.jetbrains.kotlin.analysis.api.components.expressionType -import org.jetbrains.kotlin.analysis.api.components.isMarkedNullable -import org.jetbrains.kotlin.analysis.api.components.isNothingType -import org.jetbrains.kotlin.analysis.api.components.isUsedAsExpression -import org.jetbrains.kotlin.analysis.api.components.resolveToCall -import org.jetbrains.kotlin.analysis.api.components.resolveToSymbol +import org.jetbrains.kotlin.analysis.api.components.* import org.jetbrains.kotlin.analysis.api.resolution.KaFunctionCall import org.jetbrains.kotlin.analysis.api.resolution.singleFunctionCallOrNull import org.jetbrains.kotlin.analysis.api.resolution.symbol @@ -706,8 +698,9 @@ class KotlinConstantConditionsInspection : AbstractKotlinInspection() { else -> {} } - if (expression is KtSimpleNameExpression) { - val target = expression.mainReference.resolve() + val targetExpression = (expression as? KtDotQualifiedExpression)?.selectorExpression ?: expression + if (targetExpression is KtSimpleNameExpression) { + val target = targetExpression.mainReference.resolve() if (target is KtProperty && !target.isVar && target.initializer is KtConstantExpression) { // suppress warnings uses of boolean constant like 'val b = true' return true diff --git a/plugins/kotlin/idea/tests/testData/inspections/dfa/Suppressions.kt b/plugins/kotlin/idea/tests/testData/inspections/dfa/Suppressions.kt index b0538cc3eb46..dbfe4ac8fe0d 100644 --- a/plugins/kotlin/idea/tests/testData/inspections/dfa/Suppressions.kt +++ b/plugins/kotlin/idea/tests/testData/inspections/dfa/Suppressions.kt @@ -6,6 +6,15 @@ fun doNotWarnAtZero(x: Int) { if (x > ZERO) return assert(x == ZERO) } + +object Constants { + const val FALSE = false +} + +fun doNotWarnAtFalse(flag: Boolean?): Boolean { + return flag ?: Constants.FALSE +} + fun returnInReturn(a: Boolean, b: Boolean): Boolean { // KTIJ-23768 return a || return b diff --git a/plugins/kotlin/idea/tests/testData/inspections/dfa/SuppressionsK2.kt b/plugins/kotlin/idea/tests/testData/inspections/dfa/SuppressionsK2.kt index 3e2c47f216d4..4ec82b240e55 100644 --- a/plugins/kotlin/idea/tests/testData/inspections/dfa/SuppressionsK2.kt +++ b/plugins/kotlin/idea/tests/testData/inspections/dfa/SuppressionsK2.kt @@ -6,6 +6,15 @@ fun doNotWarnAtZero(x: Int) { if (x > ZERO) return assert(x == ZERO) } + +object Constants { + const val FALSE = false +} + +fun doNotWarnAtFalse(flag: Boolean?): Boolean { + return flag ?: Constants.FALSE +} + fun returnInReturn(a: Boolean, b: Boolean): Boolean { // KTIJ-23768 return a || return b