[kotlin] KTIJ-30904 Fix false positive in KotlinConstantConditionsInspection for qualified constants

GitOrigin-RevId: 116902b3da8b68d3a36c74ecadea341dfa286933
This commit is contained in:
Andrey Cherkasov
2025-10-10 15:19:50 +00:00
committed by intellij-monorepo-bot
parent f7fa4abd8c
commit 14d9bd4852
3 changed files with 22 additions and 11 deletions
@@ -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
@@ -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
@@ -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