diff --git a/plugins/kotlin/code-insight/kotlin.code-insight.k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/hints/KtParameterHintsProvider.kt b/plugins/kotlin/code-insight/kotlin.code-insight.k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/hints/KtParameterHintsProvider.kt
index c728968f63c0..88313110fd2c 100644
--- a/plugins/kotlin/code-insight/kotlin.code-insight.k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/hints/KtParameterHintsProvider.kt
+++ b/plugins/kotlin/code-insight/kotlin.code-insight.k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/hints/KtParameterHintsProvider.kt
@@ -99,10 +99,15 @@ class KtParameterHintsProvider : AbstractKtInlayHintsProvider() {
val argument = arguments[index]
val symbolName = symbol.name
val name: Name = symbolName
+ // do not put inlay hints for a named argument
if (argument.isNamed()) {
+ // it is possible to place named argument in a wrong position when there is some default value
+ // after which you have to name rest arguments and no reason to proceed further
if (argument.getArgumentName()?.asName != name) break
continue
}
+ // avoid cases like "`value:` value"
+ if (argument.text == name.asString()) continue
name.takeUnless(Name::isSpecial)?.asString()?.let { stringName ->
sink.addPresentation(InlineInlayPosition(argument.startOffset, true), hasBackground = true) {
diff --git a/plugins/kotlin/idea/tests/testData/codeInsight/hints/arguments/namedParameters.k2.kt b/plugins/kotlin/idea/tests/testData/codeInsight/hints/arguments/namedParameters.k2.kt
index 7f116a13a262..b782685b3b8c 100644
--- a/plugins/kotlin/idea/tests/testData/codeInsight/hints/arguments/namedParameters.k2.kt
+++ b/plugins/kotlin/idea/tests/testData/codeInsight/hints/arguments/namedParameters.k2.kt
@@ -1,6 +1,17 @@
-fun foo(index: Int, firstName: String = "John", lastName: String = "Smith") {
-
-}
+fun foo(index: Int, firstName: String = "John", lastName: String = "Smith") {}
+fun simpleFun1(name: String){}
+fun simpleFun2(name: String){}
+fun simpleFun2(name: String, value: Int){}
val f = foo(/*<# [namedParameters.kt:8]index|: #>*/0, lastName = "Johnson")
-val f2 = foo(/*<# [namedParameters.kt:8]index|: #>*/0, firstName = "Joe", /*<# [namedParameters.kt:48]lastName|: #>*/"Johnson")
\ No newline at end of file
+val f2 = foo(/*<# [namedParameters.kt:8]index|: #>*/0, firstName = "Joe", /*<# [namedParameters.kt:48]lastName|: #>*/"Johnson")
+fun m() {
+ val name = "name"
+ val n = "name"
+ simpleFun0()
+ simpleFun1(/*<# [namedParameters.kt:94]name|: #>*/"name")
+ simpleFun1(name)
+ simpleFun1(/*<# [namedParameters.kt:94]name|: #>*/n)
+ simpleFun2(name)
+ simpleFun2(/*<# [namedParameters.kt:125]name|: #>*/n)
+}
\ No newline at end of file
diff --git a/plugins/kotlin/idea/tests/testData/codeInsight/hints/arguments/namedParameters.kt b/plugins/kotlin/idea/tests/testData/codeInsight/hints/arguments/namedParameters.kt
index 6498953995e5..7ec8488e7049 100644
--- a/plugins/kotlin/idea/tests/testData/codeInsight/hints/arguments/namedParameters.kt
+++ b/plugins/kotlin/idea/tests/testData/codeInsight/hints/arguments/namedParameters.kt
@@ -1,6 +1,17 @@
-fun foo(index: Int, firstName: String = "John", lastName: String = "Smith") {
-
-}
+fun foo(index: Int, firstName: String = "John", lastName: String = "Smith") {}
+fun simpleFun1(name: String){}
+fun simpleFun2(name: String){}
+fun simpleFun2(name: String, value: Int){}
val f = foo(0, lastName = "Johnson")
-val f2 = foo(0, firstName = "Joe", "Johnson")
\ No newline at end of file
+val f2 = foo(0, firstName = "Joe", "Johnson")
+fun m() {
+ val name = "name"
+ val n = "name"
+ simpleFun0()
+ simpleFun1("name")
+ simpleFun1(name)
+ simpleFun1(n)
+ simpleFun2(name)
+ simpleFun2(n)
+}
\ No newline at end of file