Skip to content

Commit 47b8384

Browse files
SONARKT-286 Fix S6619 false positives caused by resolving binary expression operations too far (#393)
1 parent f03be39 commit 47b8384

File tree

2 files changed

+11
-4
lines changed

2 files changed

+11
-4
lines changed

kotlin-checks-test-sources/src/main/kotlin/checks/UselessNullCheckCheckSample.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,3 +127,10 @@ private fun <E : Throwable> moo(exception: E) =
127127
cachedCtor(exception) as E?
128128
}
129129

130+
private class FooBar(
131+
something: Any
132+
) {
133+
private val someString: String? = something as? String
134+
val isString: Boolean
135+
get() = someString != null // Compliant
136+
}

sonar-kotlin-checks/src/main/java/org/sonarsource/kotlin/checks/UselessNullCheckCheck.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -113,12 +113,12 @@ class UselessNullCheckCheck : AbstractCheck() {
113113
}
114114

115115
private fun KtBinaryExpression.operandComparedToNull(bc: BindingContext): KtExpression? {
116-
val left = left?.predictRuntimeValueExpression(bc) ?: return null
117-
val right = right?.predictRuntimeValueExpression(bc) ?: return null
116+
val leftResolved = left?.predictRuntimeValueExpression(bc) ?: return null
117+
val rightResolved = right?.predictRuntimeValueExpression(bc) ?: return null
118118

119119
return when {
120-
left.isNull() -> right
121-
right.isNull() -> left
120+
leftResolved.isNull() -> right
121+
rightResolved.isNull() -> left
122122
else -> null
123123
}
124124
}

0 commit comments

Comments
 (0)