From 9ebf94b4cf01aeecead3cea47fd73f62fc647feb Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Fri, 25 Mar 2016 18:24:36 +0300 Subject: [PATCH] KT-11609 No named arguments completion should be after dot #KT-11609 Fixed --- .../kotlin/idea/completion/BasicCompletionSession.kt | 4 ++-- .../kotlin/idea/completion/NamedArgumentCompletion.kt | 5 ++++- .../idea/completion/smart/SmartCompletionSession.kt | 2 +- .../testData/basic/common/namedArguments/NotAfterDot.kt | 9 +++++++++ .../completion/test/JSBasicCompletionTestGenerated.java | 6 ++++++ .../completion/test/JvmBasicCompletionTestGenerated.java | 6 ++++++ 6 files changed, 28 insertions(+), 4 deletions(-) create mode 100644 idea/idea-completion/testData/basic/common/namedArguments/NotAfterDot.kt diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/BasicCompletionSession.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/BasicCompletionSession.kt index 4f5f62490ed..c649b334960 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/BasicCompletionSession.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/BasicCompletionSession.kt @@ -214,7 +214,7 @@ class BasicCompletionSession( flushToResultSet() - NamedArgumentCompletion.complete(collector, expectedInfos) + NamedArgumentCompletion.complete(collector, expectedInfos, callTypeAndReceiver.callType) flushToResultSet() val contextVariablesProvider = RealContextVariablesProvider(referenceVariantsHelper, position) @@ -436,7 +436,7 @@ class BasicCompletionSession( get() = null override fun doComplete() { - NamedArgumentCompletion.complete(collector, expectedInfos) + NamedArgumentCompletion.complete(collector, expectedInfos, callTypeAndReceiver.callType) } } diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/NamedArgumentCompletion.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/NamedArgumentCompletion.kt index c4872f17cd0..121255bc70e 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/NamedArgumentCompletion.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/NamedArgumentCompletion.kt @@ -24,6 +24,7 @@ import org.jetbrains.kotlin.idea.KotlinIcons import org.jetbrains.kotlin.idea.completion.handlers.WithTailInsertHandler import org.jetbrains.kotlin.idea.core.ArgumentPositionData import org.jetbrains.kotlin.idea.core.ExpectedInfo +import org.jetbrains.kotlin.idea.util.CallType import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.KtCallElement import org.jetbrains.kotlin.psi.KtSimpleNameExpression @@ -46,7 +47,9 @@ object NamedArgumentCompletion { .any { it.isNamed() } } - fun complete(collector: LookupElementsCollector, expectedInfos: Collection) { + fun complete(collector: LookupElementsCollector, expectedInfos: Collection, callType: CallType<*>) { + if (callType != CallType.DEFAULT) return + val nameToParameterType = HashMap>() for (expectedInfo in expectedInfos) { val argumentData = expectedInfo.additionalData as? ArgumentPositionData.Positional ?: continue diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/smart/SmartCompletionSession.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/smart/SmartCompletionSession.kt index fb63bd0213e..e7d53ea81d7 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/smart/SmartCompletionSession.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/smart/SmartCompletionSession.kt @@ -70,7 +70,7 @@ class SmartCompletionSession( override fun doComplete() { if (nameExpression != null && NamedArgumentCompletion.isOnlyNamedArgumentExpected(nameExpression)) { - NamedArgumentCompletion.complete(collector, expectedInfos) + NamedArgumentCompletion.complete(collector, expectedInfos, callTypeAndReceiver.callType) return } diff --git a/idea/idea-completion/testData/basic/common/namedArguments/NotAfterDot.kt b/idea/idea-completion/testData/basic/common/namedArguments/NotAfterDot.kt new file mode 100644 index 00000000000..56c19a06706 --- /dev/null +++ b/idea/idea-completion/testData/basic/common/namedArguments/NotAfterDot.kt @@ -0,0 +1,9 @@ +fun foo(abcdef: Int) { + +} + +fun bar() { + foo("a".abcd) +} + +// NOTHING_ELSE \ No newline at end of file diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java index 72080b44760..2f7f765f740 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java @@ -1758,6 +1758,12 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes doTest(fileName); } + @TestMetadata("NotAfterDot.kt") + public void testNotAfterDot() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/namedArguments/NotAfterDot.kt"); + doTest(fileName); + } + @TestMetadata("NotInBrackets.kt") public void testNotInBrackets() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/namedArguments/NotInBrackets.kt"); diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java index 6209aaa12a7..6fe6d067dca 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java @@ -1758,6 +1758,12 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT doTest(fileName); } + @TestMetadata("NotAfterDot.kt") + public void testNotAfterDot() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/namedArguments/NotAfterDot.kt"); + doTest(fileName); + } + @TestMetadata("NotInBrackets.kt") public void testNotInBrackets() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/namedArguments/NotInBrackets.kt");