diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/SuspiciousEqualsCombination.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/SuspiciousEqualsCombination.kt index b42dfc69c61..9e720fc356c 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/SuspiciousEqualsCombination.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/SuspiciousEqualsCombination.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.idea.inspections import com.intellij.codeInspection.LocalInspectionToolSession import com.intellij.codeInspection.ProblemHighlightType import com.intellij.codeInspection.ProblemsHolder +import org.jetbrains.kotlin.idea.intentions.branchedTransformations.isNullExpression import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* @@ -29,12 +30,16 @@ class SuspiciousEqualsCombination : AbstractKotlinInspection() { private fun KtBinaryExpression.parseBinary(pair: ComparisonOperands = ComparisonOperands()): ComparisonOperands { when (operationToken) { KtTokens.EQEQ, KtTokens.EXCLEQ -> { - (left as? KtNameReferenceExpression)?.let(pair.eqEqOperands::add) - (right as? KtNameReferenceExpression)?.let(pair.eqEqOperands::add) + if (!left.isNullExpression() && !right.isNullExpression()) { + (left as? KtNameReferenceExpression)?.let(pair.eqEqOperands::add) + (right as? KtNameReferenceExpression)?.let(pair.eqEqOperands::add) + } } KtTokens.EQEQEQ, KtTokens.EXCLEQEQEQ -> { - (left as? KtNameReferenceExpression)?.let(pair.eqEqEqOperands::add) - (right as? KtNameReferenceExpression)?.let(pair.eqEqEqOperands::add) + if (!left.isNullExpression() && !right.isNullExpression()) { + (left as? KtNameReferenceExpression)?.let(pair.eqEqEqOperands::add) + (right as? KtNameReferenceExpression)?.let(pair.eqEqEqOperands::add) + } } KtTokens.ANDAND, KtTokens.OROR -> { right?.parseExpression(pair) diff --git a/idea/testData/inspections/suspiciousEqualsCombination/inspectionData/expected.xml b/idea/testData/inspections/suspiciousEqualsCombination/inspectionData/expected.xml index 39362e13dcf..4f22b12b617 100644 --- a/idea/testData/inspections/suspiciousEqualsCombination/inspectionData/expected.xml +++ b/idea/testData/inspections/suspiciousEqualsCombination/inspectionData/expected.xml @@ -34,4 +34,13 @@ Suspicious combination of == and === Suspicious combination of == and === + + + test.kt + 18 + light_idea_test_case + + Suspicious combination of == and === + Suspicious combination of == and === + \ No newline at end of file diff --git a/idea/testData/inspections/suspiciousEqualsCombination/test.kt b/idea/testData/inspections/suspiciousEqualsCombination/test.kt index a9559043972..b9d2aa66cc0 100644 --- a/idea/testData/inspections/suspiciousEqualsCombination/test.kt +++ b/idea/testData/inspections/suspiciousEqualsCombination/test.kt @@ -7,6 +7,15 @@ object Main { if (type === CONST1 || type == CONST2 && !(type === CONST3)) return if (type === CONST1 || type1 == CONST2 && type === CONST3) return if (type === CONST1 || type1 == CONST1 && type === CONST3) return + + val type2: Main? = null + if (type2 == null || type === type2) return + + val type3: Main? = null + if (type3 === null || type == type3) return + + val type4: Main? = null + if (type4 == null || type === type2 || type1 == type) return } val CONST1 = Main;