From 0bc5007147d06486325ebe9cc977fc4498b92e6d Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Thu, 16 Jun 2016 21:19:34 +0300 Subject: [PATCH] KT-12369 Completion: pressing dot after class name should not cause insertion of constructor call #KT-12369 Fixed --- .../jetbrains/kotlin/idea/completion/Weighers.kt | 12 +++++++++++- .../handlers/basic/PreferClassToConstructor.kt | 13 +++++++++++++ .../basic/PreferClassToConstructor.kt.after | 13 +++++++++++++ .../BasicCompletionHandlerTestGenerated.java | 6 ++++++ 4 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 idea/idea-completion/testData/handlers/basic/PreferClassToConstructor.kt create mode 100644 idea/idea-completion/testData/handlers/basic/PreferClassToConstructor.kt.after 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 5cae7296712..7819f59a875 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 @@ -180,6 +180,7 @@ object PreferMatchingItemWeigher : LookupElementWeigher("kotlin.preferMatching", keywordExactMatch, defaultExactMatch, functionExactMatch, + specialExactMatch, notExactMatch } @@ -192,7 +193,16 @@ object PreferMatchingItemWeigher : LookupElementWeigher("kotlin.preferMatching", val o = element.`object` return when (o) { is KeywordLookupObject -> Weight.keywordExactMatch - is DeclarationLookupObject -> if (o.descriptor is FunctionDescriptor) Weight.functionExactMatch else Weight.defaultExactMatch + + is DeclarationLookupObject -> { + val smartCompletionPriority = element.getUserData(SMART_COMPLETION_ITEM_PRIORITY_KEY) + when { + smartCompletionPriority != null && smartCompletionPriority != SmartCompletionItemPriority.DEFAULT -> Weight.specialExactMatch + o.descriptor is FunctionDescriptor -> Weight.functionExactMatch + else -> Weight.defaultExactMatch + } + } + else -> Weight.defaultExactMatch } } diff --git a/idea/idea-completion/testData/handlers/basic/PreferClassToConstructor.kt b/idea/idea-completion/testData/handlers/basic/PreferClassToConstructor.kt new file mode 100644 index 00000000000..cfc7237eb1f --- /dev/null +++ b/idea/idea-completion/testData/handlers/basic/PreferClassToConstructor.kt @@ -0,0 +1,13 @@ +class Color { + companion object { + val RED = Color() + } +} + +fun getColor(): Color? { + return Color +} + +// INVOCATION_COUNT: 0 +// ELEMENT: * +// CHAR: '.' diff --git a/idea/idea-completion/testData/handlers/basic/PreferClassToConstructor.kt.after b/idea/idea-completion/testData/handlers/basic/PreferClassToConstructor.kt.after new file mode 100644 index 00000000000..a1adda84811 --- /dev/null +++ b/idea/idea-completion/testData/handlers/basic/PreferClassToConstructor.kt.after @@ -0,0 +1,13 @@ +class Color { + companion object { + val RED = Color() + } +} + +fun getColor(): Color? { + return Color. +} + +// INVOCATION_COUNT: 0 +// ELEMENT: * +// CHAR: '.' diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/handlers/BasicCompletionHandlerTestGenerated.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/handlers/BasicCompletionHandlerTestGenerated.java index c53d27bb6a0..76b7a65f1f3 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/handlers/BasicCompletionHandlerTestGenerated.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/handlers/BasicCompletionHandlerTestGenerated.java @@ -155,6 +155,12 @@ public class BasicCompletionHandlerTestGenerated extends AbstractBasicCompletion doTest(fileName); } + @TestMetadata("PreferClassToConstructor.kt") + public void testPreferClassToConstructor() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/handlers/basic/PreferClassToConstructor.kt"); + doTest(fileName); + } + @TestMetadata("PreferMatchingKeyword.kt") public void testPreferMatchingKeyword() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/handlers/basic/PreferMatchingKeyword.kt");