From b4a63794e57f63e3a94043e1227df8200fa9b175 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Tue, 7 May 2019 19:51:42 +0300 Subject: [PATCH] Add name to argument: support old-style comment deletion --- .../kotlin/idea/intentions/AddNameToArgumentIntention.kt | 8 ++++++++ idea/testData/intentions/addNameToArgument/withComment.kt | 7 +++++++ .../intentions/addNameToArgument/withComment.kt.after | 7 +++++++ .../kotlin/idea/intentions/IntentionTestGenerated.java | 5 +++++ 4 files changed, 27 insertions(+) create mode 100644 idea/testData/intentions/addNameToArgument/withComment.kt create mode 100644 idea/testData/intentions/addNameToArgument/withComment.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/AddNameToArgumentIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/AddNameToArgumentIntention.kt index 8d78bcf5648..311d6f445e7 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/AddNameToArgumentIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/AddNameToArgumentIntention.kt @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.idea.intentions import com.intellij.codeInsight.intention.LowPriorityAction import com.intellij.openapi.editor.Editor +import com.intellij.psi.PsiComment import com.intellij.psi.PsiElement import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.config.LanguageVersionSettings @@ -28,6 +29,7 @@ import org.jetbrains.kotlin.idea.conversion.copy.start import org.jetbrains.kotlin.idea.project.languageVersionSettings import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.psi.psiUtil.getPrevSiblingIgnoringWhitespace import org.jetbrains.kotlin.resolve.calls.model.ArgumentMatch import org.jetbrains.kotlin.resolve.calls.model.ArgumentMatchStatus.ARGUMENT_HAS_NO_TYPE import org.jetbrains.kotlin.resolve.calls.model.ArgumentMatchStatus.SUCCESS @@ -63,6 +65,12 @@ class AddNameToArgumentIntention : SelfTargetingIntention( fun apply(element: KtValueArgument, givenResolvedCall: ResolvedCall<*>? = null): Boolean { val name = detectNameToAdd(element, shouldBeLastUnnamed = false, givenResolvedCall = givenResolvedCall) ?: return false val argumentExpression = element.getArgumentExpression() ?: return false + + val prevSibling = element.getPrevSiblingIgnoringWhitespace() + if (prevSibling is PsiComment && """/\*\s*$name\s*=\s*\*/""".toRegex().matches(prevSibling.text)) { + prevSibling.delete() + } + val newArgument = KtPsiFactory(element).createArgument(argumentExpression, name, element.getSpreadElement() != null) element.replace(newArgument) return true diff --git a/idea/testData/intentions/addNameToArgument/withComment.kt b/idea/testData/intentions/addNameToArgument/withComment.kt new file mode 100644 index 00000000000..ee8d3456b6d --- /dev/null +++ b/idea/testData/intentions/addNameToArgument/withComment.kt @@ -0,0 +1,7 @@ +// INTENTION_TEXT: "Add 'b =' to argument" + +fun foo(s: String, b: Boolean){} + +fun bar() { + foo("", /* b = */ true) +} \ No newline at end of file diff --git a/idea/testData/intentions/addNameToArgument/withComment.kt.after b/idea/testData/intentions/addNameToArgument/withComment.kt.after new file mode 100644 index 00000000000..73a5834ea08 --- /dev/null +++ b/idea/testData/intentions/addNameToArgument/withComment.kt.after @@ -0,0 +1,7 @@ +// INTENTION_TEXT: "Add 'b =' to argument" + +fun foo(s: String, b: Boolean){} + +fun bar() { + foo("", b = true) +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java index 5a493d9919c..7050220355e 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -1280,6 +1280,11 @@ public class IntentionTestGenerated extends AbstractIntentionTest { public void testVararg3() throws Exception { runTest("idea/testData/intentions/addNameToArgument/vararg3.kt"); } + + @TestMetadata("withComment.kt") + public void testWithComment() throws Exception { + runTest("idea/testData/intentions/addNameToArgument/withComment.kt"); + } } @TestMetadata("idea/testData/intentions/addNamesToCallArguments")