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