diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/SetterBackingFieldAssignmentInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/SetterBackingFieldAssignmentInspection.kt index 4117abbecd3..34d6c307eb7 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/SetterBackingFieldAssignmentInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/SetterBackingFieldAssignmentInspection.kt @@ -34,13 +34,17 @@ class SetterBackingFieldAssignmentInspection : AbstractKotlinInspection(), Clean if (bodyExpression.anyDescendantOfType { when (it) { is KtBinaryExpression -> - it.left?.text == KtTokens.FIELD_KEYWORD.value && it.operationToken in assignmentOperators + it.left.isBackingFieldReference(property) && it.operationToken in assignmentOperators is KtUnaryExpression -> - it.baseExpression?.text == KtTokens.FIELD_KEYWORD.value && it.operationToken in incrementAndDecrementOperators + it.baseExpression.isBackingFieldReference(property) && it.operationToken in incrementAndDecrementOperators is KtCallExpression -> it.valueArguments.any { arg -> - arg.text == parameter?.text - && arg.getArgumentExpression().getResolvedCall(accessorContext)?.resultingDescriptor == parameterDescriptor + arg.text == parameter?.text && run { + val argumentResultingDescriptor = + arg.getArgumentExpression().getResolvedCall(accessorContext)?.resultingDescriptor + argumentResultingDescriptor == parameterDescriptor + } + } else -> false } @@ -54,6 +58,10 @@ class SetterBackingFieldAssignmentInspection : AbstractKotlinInspection(), Clean ) }) } + + private fun KtExpression?.isBackingFieldReference(property: KtProperty) = with(SuspiciousVarPropertyInspection) { + this@isBackingFieldReference != null && isBackingFieldReference(property) + } } private val assignmentOperators = listOf(KtTokens.EQ, KtTokens.PLUSEQ, KtTokens.MINUSEQ, KtTokens.MULTEQ, KtTokens.DIVEQ, KtTokens.PERCEQ)