From 6a26e2fd825f9d55123880d7b8cadc785a83d0c4 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Tue, 10 Nov 2015 23:05:49 +0300 Subject: [PATCH] Sorting overloads in completion --- .../kotlin/idea/completion/CompletionSession.kt | 2 ++ .../jetbrains/kotlin/idea/completion/Weighers.kt | 15 +++++++++++++++ .../testData/basic/common/PreferLessParameters.kt | 10 ++++++++++ .../testData/weighers/smart/FunctionExpected.kt | 1 + .../test/JSBasicCompletionTestGenerated.java | 6 ++++++ .../test/JvmBasicCompletionTestGenerated.java | 6 ++++++ 6 files changed, 40 insertions(+) create mode 100644 idea/idea-completion/testData/basic/common/PreferLessParameters.kt diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/CompletionSession.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/CompletionSession.kt index 69efd811dfa..3b58b1dab1a 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/CompletionSession.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/CompletionSession.kt @@ -272,6 +272,8 @@ abstract class CompletionSession( sorter = sorter.weighBefore("middleMatching", PreferMatchingItemWeigher) + sorter = sorter.weighAfter("kotlin.proximity", ByNameAlphabeticalWeigher, PreferLessParametersWeigher) + return sorter } 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 14d71032548..2cd19681345 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 @@ -281,4 +281,19 @@ class PreferContextElementsWeigher(private val context: DeclarationDescriptor) : return original in contextElements } +} + +object ByNameAlphabeticalWeigher : LookupElementWeigher("kotlin.byNameAlphabetical") { + override fun weigh(element: LookupElement): String? { + val lookupObject = element.`object` as? DeclarationLookupObject ?: return null + return lookupObject.name?.asString() + } +} + +object PreferLessParametersWeigher : LookupElementWeigher("kotlin.preferLessParameters") { + override fun weigh(element: LookupElement): Int? { + val lookupObject = element.`object` as? DeclarationLookupObject ?: return null + val function = lookupObject.descriptor as? FunctionDescriptor ?: return null + return function.valueParameters.size + } } \ No newline at end of file diff --git a/idea/idea-completion/testData/basic/common/PreferLessParameters.kt b/idea/idea-completion/testData/basic/common/PreferLessParameters.kt new file mode 100644 index 00000000000..1bc55338ea2 --- /dev/null +++ b/idea/idea-completion/testData/basic/common/PreferLessParameters.kt @@ -0,0 +1,10 @@ +fun foo(iterable: Iterable) { + iterable.singl +} + +// WITH_ORDER +// EXIST: { itemText: "single", tailText: "() for Iterable in kotlin" } +// EXIST: { itemText: "single", tailText: " {...} (predicate: (String) -> Boolean) for Iterable in kotlin" } +// EXIST: { itemText: "singleOrNull", tailText: "() for Iterable in kotlin" } +// EXIST: { itemText: "singleOrNull", tailText: " {...} (predicate: (String) -> Boolean) for Iterable in kotlin" } +// NOTHING_ELSE diff --git a/idea/idea-completion/testData/weighers/smart/FunctionExpected.kt b/idea/idea-completion/testData/weighers/smart/FunctionExpected.kt index c9ed6a64cc3..2f9e1e3195e 100644 --- a/idea/idea-completion/testData/weighers/smart/FunctionExpected.kt +++ b/idea/idea-completion/testData/weighers/smart/FunctionExpected.kt @@ -12,4 +12,5 @@ fun bar(p: (String) -> Boolean) { // ORDER: {...} // ORDER: { String -> ... } // ORDER: ::x +// ORDER: ::TODO // ORDER: ::error 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 5a850dfbd28..e9dd1c08340 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 @@ -625,6 +625,12 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes doTest(fileName); } + @TestMetadata("PreferLessParameters.kt") + public void testPreferLessParameters() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/PreferLessParameters.kt"); + doTest(fileName); + } + @TestMetadata("PrivatesInSecondPressCompletion.kt") public void testPrivatesInSecondPressCompletion() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/PrivatesInSecondPressCompletion.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 b73c7308496..c83920ad9a9 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 @@ -625,6 +625,12 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT doTest(fileName); } + @TestMetadata("PreferLessParameters.kt") + public void testPreferLessParameters() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/PreferLessParameters.kt"); + doTest(fileName); + } + @TestMetadata("PrivatesInSecondPressCompletion.kt") public void testPrivatesInSecondPressCompletion() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/PrivatesInSecondPressCompletion.kt");