Support mixed positioned/named arguments in AddNameToArgumentIntention

^KT-7745 Fixed
This commit is contained in:
Denis Zharkov
2019-08-30 12:29:29 +03:00
parent e54d2c7c32
commit 18df5d9db0
4 changed files with 26 additions and 2 deletions
@@ -42,7 +42,10 @@ class AddNameToArgumentIntention : SelfTargetingIntention<KtValueArgument>(
override fun isApplicableTo(element: KtValueArgument, caretOffset: Int): Boolean { override fun isApplicableTo(element: KtValueArgument, caretOffset: Int): Boolean {
val expression = element.getArgumentExpression() ?: return false val expression = element.getArgumentExpression() ?: return false
val name = detectNameToAdd(element, shouldBeLastUnnamed = true) ?: return false val name = detectNameToAdd(
element,
shouldBeLastUnnamed = !element.languageVersionSettings.supportsFeature(LanguageFeature.MixedNamedArgumentsInTheirOwnPosition)
) ?: return false
text = "Add '$name =' to argument" text = "Add '$name =' to argument"
@@ -110,4 +113,4 @@ class AddNameToArgumentIntention : SelfTargetingIntention<KtValueArgument>(
return true return true
} }
} }
} }
@@ -0,0 +1,8 @@
// COMPILER_ARGUMENTS: -XXLanguage:+NewInference -XXLanguage:+MixedNamedArgumentsInTheirOwnPosition
// WITH_RUNTIME
fun foo(s: String, b: Boolean){}
fun bar() {
foo(<caret>"", true)
}
@@ -0,0 +1,8 @@
// COMPILER_ARGUMENTS: -XXLanguage:+NewInference -XXLanguage:+MixedNamedArgumentsInTheirOwnPosition
// WITH_RUNTIME
fun foo(s: String, b: Boolean){}
fun bar() {
foo(<caret>s = "", true)
}
@@ -1216,6 +1216,11 @@ public class IntentionTestGenerated extends AbstractIntentionTest {
runTest("idea/testData/intentions/addNameToArgument/linkedList.kt"); runTest("idea/testData/intentions/addNameToArgument/linkedList.kt");
} }
@TestMetadata("mixingPositionedAndNamed.kt")
public void testMixingPositionedAndNamed() throws Exception {
runTest("idea/testData/intentions/addNameToArgument/mixingPositionedAndNamed.kt");
}
@TestMetadata("notInsideIndices.kt") @TestMetadata("notInsideIndices.kt")
public void testNotInsideIndices() throws Exception { public void testNotInsideIndices() throws Exception {
runTest("idea/testData/intentions/addNameToArgument/notInsideIndices.kt"); runTest("idea/testData/intentions/addNameToArgument/notInsideIndices.kt");