From cf2d575eec9daf10e4a0baded368198d0ff81799 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Fri, 12 Aug 2016 15:51:23 +0300 Subject: [PATCH] Add non-null assertion: correct handling of unary expression unsafe calls #KT-13430 Fixed --- .../jetbrains/kotlin/idea/quickfix/ExclExclCallFixes.kt | 7 +++++++ .../quickfix/expressions/fixNullableUnaryWithExclExcl.kt | 9 +++++++++ .../expressions/fixNullableUnaryWithExclExcl.kt.after | 9 +++++++++ .../kotlin/idea/quickfix/QuickFixTestGenerated.java | 6 ++++++ 4 files changed, 31 insertions(+) create mode 100644 idea/testData/quickfix/expressions/fixNullableUnaryWithExclExcl.kt create mode 100644 idea/testData/quickfix/expressions/fixNullableUnaryWithExclExcl.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ExclExclCallFixes.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ExclExclCallFixes.kt index 457fa39a11b..778d945b742 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ExclExclCallFixes.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ExclExclCallFixes.kt @@ -98,6 +98,13 @@ class AddExclExclCallFix(val psiElement: PsiElement) : ExclExclCallFix() { else if (psiElement is KtArrayAccessExpression) { return psiElement.arrayExpression } + else if (psiElement is KtOperationReferenceExpression) { + val parent = psiElement.parent + return when (parent) { + is KtUnaryExpression -> parent.baseExpression + else -> null + } + } else if (psiElement is KtExpression) { return psiElement } diff --git a/idea/testData/quickfix/expressions/fixNullableUnaryWithExclExcl.kt b/idea/testData/quickfix/expressions/fixNullableUnaryWithExclExcl.kt new file mode 100644 index 00000000000..6c2c3833c58 --- /dev/null +++ b/idea/testData/quickfix/expressions/fixNullableUnaryWithExclExcl.kt @@ -0,0 +1,9 @@ +// "Add non-null asserted (!!) call" "true" + +class SafeType { + operator fun unaryMinus() {} +} + +fun safeB(p: SafeType?) { + val v = -p +} \ No newline at end of file diff --git a/idea/testData/quickfix/expressions/fixNullableUnaryWithExclExcl.kt.after b/idea/testData/quickfix/expressions/fixNullableUnaryWithExclExcl.kt.after new file mode 100644 index 00000000000..e426a49017e --- /dev/null +++ b/idea/testData/quickfix/expressions/fixNullableUnaryWithExclExcl.kt.after @@ -0,0 +1,9 @@ +// "Add non-null asserted (!!) call" "true" + +class SafeType { + operator fun unaryMinus() {} +} + +fun safeB(p: SafeType?) { + val v = -p!! +} \ 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 c55c2d471e5..cfd06b6ebeb 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -4782,6 +4782,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { doTest(fileName); } + @TestMetadata("fixNullableUnaryWithExclExcl.kt") + public void testFixNullableUnaryWithExclExcl() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/expressions/fixNullableUnaryWithExclExcl.kt"); + doTest(fileName); + } + @TestMetadata("fixNullableWithExclExclAbsentWithBadIterator.kt") public void testFixNullableWithExclExclAbsentWithBadIterator() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/expressions/fixNullableWithExclExclAbsentWithBadIterator.kt");