diff --git a/idea/src/org/jetbrains/jet/plugin/completion/smart/LambdaItems.kt b/idea/src/org/jetbrains/jet/plugin/completion/smart/LambdaItems.kt index 721910c1f4d..2651e00bc64 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/smart/LambdaItems.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/smart/LambdaItems.kt @@ -37,6 +37,7 @@ object LambdaItems { val lookupElement = LookupElementBuilder.create("{...}") .withInsertHandler(ArtificialElementInsertHandler("{ ", " }", false)) .suppressAutoInsertion() + .assignSmartCompletionPriority(SmartCompletionItemPriority.LAMBDA_NO_PARAMS) .addTailAndNameSimilarity(functionExpectedInfos) lookupElement.putUserData(KotlinCompletionCharFilter.ACCEPT_OPENING_BRACE, true) collection.add(lookupElement) @@ -53,6 +54,7 @@ object LambdaItems { insertLambdaTemplate(context, TextRange(offset, offset + placeholder.length), functionType) }) .suppressAutoInsertion() + .assignSmartCompletionPriority(SmartCompletionItemPriority.LAMBDA) .addTailAndNameSimilarity(functionExpectedInfos.filter { it.type == functionType }) lookupElement.putUserData(KotlinCompletionCharFilter.ACCEPT_OPENING_BRACE, true) collection.add(lookupElement) diff --git a/idea/src/org/jetbrains/jet/plugin/completion/smart/SmartCompletion.kt b/idea/src/org/jetbrains/jet/plugin/completion/smart/SmartCompletion.kt index a1c3496b2bf..d23a9dd05c7 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/smart/SmartCompletion.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/smart/SmartCompletion.kt @@ -251,7 +251,9 @@ class SmartCompletion(val expression: JetSimpleNameExpression, } } - return lookupElement.addTailAndNameSimilarity(matchedExpectedInfos) + return lookupElement + .assignSmartCompletionPriority(SmartCompletionItemPriority.FUNCTION_REFERENCE) + .addTailAndNameSimilarity(matchedExpectedInfos) } if (descriptor is SimpleFunctionDescriptor) { diff --git a/idea/src/org/jetbrains/jet/plugin/completion/smart/Utils.kt b/idea/src/org/jetbrains/jet/plugin/completion/smart/Utils.kt index 09ba6ff5f84..8045c49950b 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/smart/Utils.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/smart/Utils.kt @@ -204,6 +204,9 @@ enum class SmartCompletionItemPriority { STATIC_MEMBER INSTANTIATION ANONYMOUS_OBJECT + LAMBDA_NO_PARAMS + LAMBDA + FUNCTION_REFERENCE } val SMART_COMPLETION_ITEM_PRIORITY_KEY = Key("SMART_COMPLETION_ITEM_PRIORITY_KEY") diff --git a/idea/testData/completion/weighers/smart/FunctionExpected.kt b/idea/testData/completion/weighers/smart/FunctionExpected.kt new file mode 100644 index 00000000000..f165b099643 --- /dev/null +++ b/idea/testData/completion/weighers/smart/FunctionExpected.kt @@ -0,0 +1,15 @@ +fun foo(filter: (String) -> Boolean) {} + +fun doFilter(s: String): Boolean = true +fun x(s: String): Boolean = true + +fun bar(p: (String) -> Boolean) { + foo() +} + +// ORDER: ::doFilter +// ORDER: p +// ORDER: {...} +// ORDER: { String -> ... } +// ORDER: ::error +// ORDER: ::x diff --git a/idea/tests/org/jetbrains/jet/completion/weighers/SmartCompletionWeigherTestGenerated.java b/idea/tests/org/jetbrains/jet/completion/weighers/SmartCompletionWeigherTestGenerated.java index 0b233d08986..9d0da71bde4 100644 --- a/idea/tests/org/jetbrains/jet/completion/weighers/SmartCompletionWeigherTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/completion/weighers/SmartCompletionWeigherTestGenerated.java @@ -36,6 +36,12 @@ public class SmartCompletionWeigherTestGenerated extends AbstractSmartCompletion JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/completion/weighers/smart"), Pattern.compile("^([^\\.]+)\\.kt$"), true); } + @TestMetadata("FunctionExpected.kt") + public void testFunctionExpected() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/weighers/smart/FunctionExpected.kt"); + doTest(fileName); + } + @TestMetadata("MultipleArgsItem.kt") public void testMultipleArgsItem() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/weighers/smart/MultipleArgsItem.kt");