From dd16eb14e55ed33b0a26c0f6f5475f4e6712df85 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Fri, 29 Apr 2016 21:37:55 +0300 Subject: [PATCH] KT-12080 Move parameter names higher up in code completion #KT-12080 Fixed --- .../kotlin/idea/completion/CompletionUtils.kt | 1 - .../idea/completion/NamedArgumentCompletion.kt | 2 +- .../jetbrains/kotlin/idea/completion/Weighers.kt | 7 +++++++ .../weighers/basic/NamedParameters.Data.kt | 2 +- .../testData/weighers/basic/NamedParameters.kt | 3 +++ .../testData/weighers/basic/NamedParameters2.kt | 11 +++++++++++ .../testData/weighers/basic/NamedParameters3.kt | 15 +++++++++++++++ .../BasicCompletionWeigherTestGenerated.java | 12 ++++++++++++ 8 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 idea/idea-completion/testData/weighers/basic/NamedParameters2.kt create mode 100644 idea/idea-completion/testData/weighers/basic/NamedParameters3.kt diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/CompletionUtils.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/CompletionUtils.kt index ef4b8faa20c..404af89841d 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/CompletionUtils.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/CompletionUtils.kt @@ -74,7 +74,6 @@ enum class ItemPriority { DEFAULT, IMPLEMENT, OVERRIDE, - NAMED_PARAMETER, STATIC_MEMBER_FROM_IMPORTS, STATIC_MEMBER } 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 121255bc70e..066b9bf467f 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 @@ -66,7 +66,7 @@ object NamedArgumentCompletion { .withTailText(" $typeText") .withIcon(KotlinIcons.PARAMETER) .withInsertHandler(NamedArgumentInsertHandler(name)) - .assignPriority(ItemPriority.NAMED_PARAMETER) + lookupElement.putUserData(SmartCompletionInBasicWeigher.NAMED_ARGUMENT_KEY, Unit) collector.addElement(lookupElement) } } diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/Weighers.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/Weighers.kt index 7d37f430fdf..b67ccb88104 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/Weighers.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/Weighers.kt @@ -194,6 +194,7 @@ class SmartCompletionInBasicWeigher( companion object { val KEYWORD_VALUE_MATCHED_KEY = Key("SmartCompletionInBasicWeigher.KEYWORD_VALUE_MATCHED_KEY") + val NAMED_ARGUMENT_KEY = Key("SmartCompletionInBasicWeigher.NAMED_ARGUMENT_KEY") } private val descriptorsToSkip = smartCompletion.descriptorsToSkip @@ -205,6 +206,8 @@ class SmartCompletionInBasicWeigher( private fun smartCompletionItemWeight(nameSimilarity: Int) = (1L shl 32) + nameSimilarity + private val NAMED_ARGUMENT_WEIGHT = 1L + private val NO_MATCH_WEIGHT = 0L private val DESCRIPTOR_TO_SKIP_WEIGHT = -1L // if descriptor is skipped from smart completion then it's probably irrelevant @@ -214,6 +217,10 @@ class SmartCompletionInBasicWeigher( return fullMatchWeight(0) } + if (element.getUserData(NAMED_ARGUMENT_KEY) != null) { + return NAMED_ARGUMENT_WEIGHT + } + if (element.getUserData(SMART_COMPLETION_ITEM_PRIORITY_KEY) != null) { // it's an "additional item" came from smart completion, don't match it against expected type return smartCompletionItemWeight(element.getUserData(NAME_SIMILARITY_KEY) ?: 0) } diff --git a/idea/idea-completion/testData/weighers/basic/NamedParameters.Data.kt b/idea/idea-completion/testData/weighers/basic/NamedParameters.Data.kt index ec21a57ba99..305e2bd57e8 100644 --- a/idea/idea-completion/testData/weighers/basic/NamedParameters.Data.kt +++ b/idea/idea-completion/testData/weighers/basic/NamedParameters.Data.kt @@ -1,6 +1,6 @@ package temp.test -class Options(val listNew: Boolean, val listMatch: Boolean) { +class Options(val listNew: Int, val listMatch: Boolean) { } fun listImportedFun() = 12 diff --git a/idea/idea-completion/testData/weighers/basic/NamedParameters.kt b/idea/idea-completion/testData/weighers/basic/NamedParameters.kt index 4d6654a16bb..9000b2f0aad 100644 --- a/idea/idea-completion/testData/weighers/basic/NamedParameters.kt +++ b/idea/idea-completion/testData/weighers/basic/NamedParameters.kt @@ -5,6 +5,8 @@ import temp.test.* val listThisFileVal = 12 fun listThisFileFun() = 1 +fun listFunNotMatchingType() = "" + class ListThisFileClass {} fun test(listParam: Int) { @@ -20,3 +22,4 @@ fun test(listParam: Int) { // ORDER: listImportedFun // ORDER: listMatch // ORDER: listNew +// ORDER: listFunNotMatchingType diff --git a/idea/idea-completion/testData/weighers/basic/NamedParameters2.kt b/idea/idea-completion/testData/weighers/basic/NamedParameters2.kt new file mode 100644 index 00000000000..39de4c51254 --- /dev/null +++ b/idea/idea-completion/testData/weighers/basic/NamedParameters2.kt @@ -0,0 +1,11 @@ +fun f(b: Boolean, tra: Int){} + +fun test(tri: Boolean, trb: Int) { + f(tr) +} + +// ORDER: true +// ORDER: tri +// ORDER: tra +// ORDER: trb +// ORDER: try diff --git a/idea/idea-completion/testData/weighers/basic/NamedParameters3.kt b/idea/idea-completion/testData/weighers/basic/NamedParameters3.kt new file mode 100644 index 00000000000..3fd27393d30 --- /dev/null +++ b/idea/idea-completion/testData/weighers/basic/NamedParameters3.kt @@ -0,0 +1,15 @@ +class X { + companion object { + fun instance(): X = X() + } +} + +fun f(insp: X){} + +fun test(insa: Any) { + f(ins) +} + +// ORDER: instance +// ORDER: insp +// ORDER: insa diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/weighers/BasicCompletionWeigherTestGenerated.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/weighers/BasicCompletionWeigherTestGenerated.java index 18997d17b90..b1ecee1ae41 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/weighers/BasicCompletionWeigherTestGenerated.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/weighers/BasicCompletionWeigherTestGenerated.java @@ -131,6 +131,18 @@ public class BasicCompletionWeigherTestGenerated extends AbstractBasicCompletion doTest(fileName); } + @TestMetadata("NamedParameters2.kt") + public void testNamedParameters2() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/weighers/basic/NamedParameters2.kt"); + doTest(fileName); + } + + @TestMetadata("NamedParameters3.kt") + public void testNamedParameters3() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/weighers/basic/NamedParameters3.kt"); + doTest(fileName); + } + @TestMetadata("Packages.kt") public void testPackages() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/weighers/basic/Packages.kt");