Do not suggest adding 'name =' before single vararg argument

This fixes two named argument intention tests
This commit is contained in:
Mikhail Glukhikh
2018-09-12 18:51:13 +03:00
parent 9694882db6
commit 94789c50b9
6 changed files with 16 additions and 10 deletions
@@ -19,9 +19,11 @@ package org.jetbrains.kotlin.idea.intentions
import com.intellij.codeInsight.intention.LowPriorityAction
import com.intellij.openapi.editor.Editor
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.config.LanguageFeature
import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall
import org.jetbrains.kotlin.idea.conversion.copy.end
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.resolve.calls.model.ArgumentMatch
@@ -71,6 +73,10 @@ class AddNameToArgumentIntention
if (argumentMatch.valueParameter.varargElementType != null) {
val varargArgument = resolvedCall.valueArguments[argumentMatch.valueParameter] as? VarargValueArgument ?: return null
if (varargArgument.arguments.size != 1) return null
val versionSettings = callExpr.languageVersionSettings
if (versionSettings.supportsFeature(LanguageFeature.ProhibitAssigningSingleElementsToVarargsInNamedForm)) {
if (argument.getSpreadElement() == null) return null
}
}
return argumentMatch.valueParameter.name
@@ -18,7 +18,9 @@ package org.jetbrains.kotlin.idea.intentions
import com.intellij.openapi.editor.Editor
import com.intellij.openapi.util.TextRange
import org.jetbrains.kotlin.config.LanguageFeature
import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall
import org.jetbrains.kotlin.idea.project.languageVersionSettings
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.resolve.calls.model.ArgumentMatch
import org.jetbrains.kotlin.resolve.calls.model.ArgumentMatchStatus
@@ -42,6 +44,10 @@ class AddNamesToCallArgumentsIntention : SelfTargetingRangeIntention<KtCallEleme
if (argumentMatch.valueParameter.varargElementType != null) {
val varargArgument = resolvedCall.valueArguments[argumentMatch.valueParameter] as? VarargValueArgument ?: return null
if (varargArgument.arguments.size != 1) return null
val versionSettings = element.languageVersionSettings
if (versionSettings.supportsFeature(LanguageFeature.ProhibitAssigningSingleElementsToVarargsInNamedForm)) {
if (argument.getSpreadElement() == null) return null
}
}
}
+2
View File
@@ -1,3 +1,5 @@
// IS_APPLICABLE: false
fun foo(vararg s: String){}
fun bar() {
@@ -1,5 +0,0 @@
fun foo(vararg s: String){}
fun bar() {
foo(s = ""<caret>)
}
@@ -1,3 +1,5 @@
// IS_APPLICABLE: false
fun foo(n: Int, vararg s: String){}
fun bar() {
@@ -1,5 +0,0 @@
fun foo(n: Int, vararg s: String){}
fun bar() {
<caret>foo(n = 1, s = "")
}