From 3f82cc9b390f05d7fe2cfc3573aa9cf63060c307 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Tue, 10 May 2016 19:21:55 +0300 Subject: [PATCH] KT-12260 ISE while replacing an operator with safe call #KT-12260 Fixed --- .../idea/quickfix/ReplaceInfixCallFix.kt | 22 +++++++++++++------ .../nullables/unsafeInfixCall/operator.kt | 7 ++++++ .../unsafeInfixCall/operator.kt.after | 7 ++++++ .../idea/quickfix/QuickFixTestGenerated.java | 6 +++++ 4 files changed, 35 insertions(+), 7 deletions(-) create mode 100644 idea/testData/quickfix/nullables/unsafeInfixCall/operator.kt create mode 100644 idea/testData/quickfix/nullables/unsafeInfixCall/operator.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ReplaceInfixCallFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ReplaceInfixCallFix.kt index 5a11b26d28b..e5a4ed43816 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ReplaceInfixCallFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ReplaceInfixCallFix.kt @@ -20,10 +20,9 @@ import com.intellij.codeInsight.intention.IntentionAction import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project import org.jetbrains.kotlin.diagnostics.Diagnostic -import org.jetbrains.kotlin.psi.KtBinaryExpression -import org.jetbrains.kotlin.psi.KtFile -import org.jetbrains.kotlin.psi.KtPsiFactory -import org.jetbrains.kotlin.psi.createExpressionByPattern +import org.jetbrains.kotlin.idea.intentions.OperatorToFunctionIntention +import org.jetbrains.kotlin.lexer.KtTokens +import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType class ReplaceInfixCallFix(element: KtBinaryExpression) : KotlinQuickFixAction(element) { @@ -33,9 +32,18 @@ class ReplaceInfixCallFix(element: KtBinaryExpression) : KotlinQuickFixAction< 1) { + } + } \ No newline at end of file diff --git a/idea/testData/quickfix/nullables/unsafeInfixCall/operator.kt.after b/idea/testData/quickfix/nullables/unsafeInfixCall/operator.kt.after new file mode 100644 index 00000000000..595dcfc3393 --- /dev/null +++ b/idea/testData/quickfix/nullables/unsafeInfixCall/operator.kt.after @@ -0,0 +1,7 @@ +// "Replace with safe (?.) call" "true" +// ERROR: Infix call corresponds to a dot-qualified call 'value?.compareTo(1).compareTo(0)' which is not allowed on a nullable receiver 'value?.compareTo(1)'. Use '?.'-qualified call instead +var foo: Int? = null + set(value) { + if(value?.compareTo(1) < 0) { + } + } \ 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 79b059477ac..e755ba41a84 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -5835,6 +5835,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/nullables/unsafeInfixCall"), Pattern.compile("^([\\w\\-_]+)\\.kt$"), true); } + @TestMetadata("operator.kt") + public void testOperator() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/nullables/unsafeInfixCall/operator.kt"); + doTest(fileName); + } + @TestMetadata("unsafeInfixCall.kt") public void testUnsafeInfixCall() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/nullables/unsafeInfixCall/unsafeInfixCall.kt");