diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/SurroundWithNullCheckFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/SurroundWithNullCheckFix.kt index 95a0be6fc60..141b2b602c6 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/SurroundWithNullCheckFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/SurroundWithNullCheckFix.kt @@ -104,17 +104,22 @@ class SurroundWithNullCheckFix( override fun createAction(diagnostic: Diagnostic): IntentionAction? { val typeMismatch = Errors.TYPE_MISMATCH.cast(diagnostic) val nullableExpression = typeMismatch.psiElement as? KtReferenceExpression ?: return null - val argument = nullableExpression.parent as? KtValueArgument ?: return null - val call = argument.getParentOfType(true) ?: return null - - val rootCall = call.getLastParentOfTypeInRow() ?: call - if (rootCall.parent !is KtBlockExpression) return null - + val parent = nullableExpression.parent + val root = when (parent) { + is KtValueArgument -> { + val call = parent.getParentOfType(true) ?: return null + call.getLastParentOfTypeInRow() ?: call + } + is KtBinaryExpression -> { + if (parent.right != nullableExpression) return null + parent + } + else -> return null + } + if (root.parent !is KtBlockExpression) return null if (!isNullabilityMismatch(expected = typeMismatch.a, actual = typeMismatch.b)) return null - if (!nullableExpression.isStableSimpleExpression()) return null - - return SurroundWithNullCheckFix(rootCall, nullableExpression) + return SurroundWithNullCheckFix(root, nullableExpression) } } } diff --git a/idea/testData/quickfix/surroundWithNullCheck/assignment.kt b/idea/testData/quickfix/surroundWithNullCheck/assignment.kt new file mode 100644 index 00000000000..cdafab905ca --- /dev/null +++ b/idea/testData/quickfix/surroundWithNullCheck/assignment.kt @@ -0,0 +1,6 @@ +// "Surround with null check" "true" + +fun foo(s: String?) { + var ss: String = "" + ss = s +} \ No newline at end of file diff --git a/idea/testData/quickfix/surroundWithNullCheck/assignment.kt.after b/idea/testData/quickfix/surroundWithNullCheck/assignment.kt.after new file mode 100644 index 00000000000..fb21914b171 --- /dev/null +++ b/idea/testData/quickfix/surroundWithNullCheck/assignment.kt.after @@ -0,0 +1,8 @@ +// "Surround with null check" "true" + +fun foo(s: String?) { + var ss: String = "" + if (s != null) { + ss = s + } +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index 9e10d788ba2..0b922be316a 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -11526,6 +11526,11 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { runTest("idea/testData/quickfix/surroundWithNullCheck/argumentNullable.kt"); } + @TestMetadata("assignment.kt") + public void testAssignment() throws Exception { + runTest("idea/testData/quickfix/surroundWithNullCheck/assignment.kt"); + } + @TestMetadata("chainedUnsafeCall.kt") public void testChainedUnsafeCall() throws Exception { runTest("idea/testData/quickfix/surroundWithNullCheck/chainedUnsafeCall.kt");