diff --git a/compiler/frontend/src/org/jetbrains/kotlin/contracts/parsing/PsiConditionParser.kt b/compiler/frontend/src/org/jetbrains/kotlin/contracts/parsing/PsiConditionParser.kt index 065abece2a4..7d0a9e35054 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/contracts/parsing/PsiConditionParser.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/contracts/parsing/PsiConditionParser.kt @@ -103,6 +103,7 @@ internal class PsiConditionParser( when (expression.operationToken) { KtTokens.ANDAND -> operationConstructor = ::LogicalAnd KtTokens.OROR -> operationConstructor = ::LogicalOr + KtTokens.EXCLEQEQEQ, KtTokens.EQEQEQ -> return parseIdentityEquals(expression) else -> return super.visitBinaryExpression(expression, data) // pass binary expression further } @@ -111,6 +112,13 @@ internal class PsiConditionParser( return operationConstructor(left, right) } + private fun parseIdentityEquals(expression: KtBinaryExpression): BooleanExpression? { + val lhs = dispatcher.parseValue(expression.left) ?: return null + val rhs = dispatcher.parseValue(expression.right) ?: return null + + return processEquals(lhs, rhs, expression.operationToken == KtTokens.EXCLEQEQEQ, expression) + } + private fun processEquals( left: ContractDescriptionValue, right: ContractDescriptionValue,