Completion: more intuitive presentation of function items that insert lambda

This commit is contained in:
Valentin Kipyatkov
2015-07-06 22:04:59 +03:00
parent 88dd86d603
commit 1f79955275
6 changed files with 16 additions and 10 deletions
@@ -169,11 +169,20 @@ public class LookupElementFactory(
}
var element = LookupElementBuilder.create(lookupObject, name)
val insertHandler = getDefaultInsertHandler(descriptor)
element = element.withInsertHandler(insertHandler)
when (descriptor) {
is FunctionDescriptor -> {
val returnType = descriptor.getReturnType()
element = element.withTypeText(if (returnType != null) DescriptorRenderer.SHORT_NAMES_IN_TYPES.renderType(returnType) else "")
element = element.appendTailText(DescriptorRenderer.SHORT_NAMES_IN_TYPES.renderFunctionParameters(descriptor), false)
val insertsLambda = (insertHandler as KotlinFunctionInsertHandler).lambdaInfo != null
if (insertsLambda) {
element = element.appendTailText(" {...} ", false)
}
element = element.appendTailText(DescriptorRenderer.SHORT_NAMES_IN_TYPES.renderFunctionParameters(descriptor), insertsLambda)
}
is VariableDescriptor -> {
@@ -232,9 +241,6 @@ public class LookupElementFactory(
element = element.withStrikeoutness(true)
}
val insertHandler = getDefaultInsertHandler(descriptor)
element = element.withInsertHandler(insertHandler)
if (insertHandler is KotlinFunctionInsertHandler && insertHandler.lambdaInfo != null) {
element.putUserData(KotlinCompletionCharFilter.ACCEPT_OPENING_BRACE, Unit)
}
@@ -1,5 +1,5 @@
fun foo(list: List<String>) {
list.<caret>
}
// EXIST: { itemText: "firstOrNull", tailText: "(predicate: (String) -> Boolean) for Iterable<T> in kotlin", typeText: "String?" }
// EXIST: { itemText: "toMap", tailText: "(selector: (String) -> K) for Iterable<T> in kotlin", typeText: "Map<K, String>" }
// EXIST: { itemText: "firstOrNull", tailText: " {...} (predicate: (String) -> Boolean) for Iterable<T> in kotlin", typeText: "String?" }
// EXIST: { itemText: "toMap", tailText: " {...} (selector: (String) -> K) for Iterable<T> in kotlin", typeText: "Map<K, String>" }
@@ -1,4 +1,4 @@
var a : Runnable = <caret>
// ELEMENT_TEXT: Runnable
// TAIL_TEXT: "(function: () -> Unit) (java.lang)"
// TAIL_TEXT: " {...} (function: () -> Unit) (java.lang)"
@@ -1,4 +1,4 @@
var a : Runnable = Runnable { <caret> }
// ELEMENT_TEXT: Runnable
// TAIL_TEXT: "(function: () -> Unit) (java.lang)"
// TAIL_TEXT: " {...} (function: () -> Unit) (java.lang)"
+1 -1
View File
@@ -1,3 +1,3 @@
var a : Runnable = <caret>
// EXIST: {"lookupString":"Runnable", "itemText":"Runnable", "tailText":"(function: () -> Unit) (java.lang)", "typeText":"Runnable"}
// EXIST: {"lookupString":"Runnable", "itemText":"Runnable", "tailText":" {...} (function: () -> Unit) (java.lang)", "typeText":"Runnable"}
@@ -2,5 +2,5 @@ fun foo(list: List<String>): Collection<Int> {
return list.<caret>
}
// EXIST: { lookupString: "map", tailText: "(transform: (String) -> Int) for Iterable<T> in kotlin", typeText: "List<Int>" }
// EXIST: { lookupString: "map", tailText: " {...} (transform: (String) -> Int) for Iterable<T> in kotlin", typeText: "List<Int>" }
// ABSENT: filter