Smart completion: generic functions are correctly included into the list

#KT-6375 Fixed
This commit is contained in:
Valentin Kipyatkov
2014-12-03 14:00:33 +03:00
parent a40db1e794
commit 856be73500
24 changed files with 388 additions and 126 deletions
@@ -0,0 +1,8 @@
fun foo(array: Array<String>){}
fun f(){
foo(<caret>)
}
// EXIST: { lookupString: "array", tailText: "(vararg t: String) (kotlin)", typeText: "Array<String>" }
// ABSENT: arrayOfNulls
@@ -0,0 +1,8 @@
fun foo(array: Array<String?>){}
fun f(){
foo(<caret>)
}
// EXIST: { lookupString: "array", tailText: "(vararg t: String?) (kotlin)", typeText: "Array<String?>" }
// EXIST: { lookupString: "arrayOfNulls", tailText: "(size: Int) (kotlin)", typeText: "Array<String?>" }
@@ -0,0 +1,9 @@
fun foo(list: List<String>){}
fun f(){
foo(<caret>)
}
// EXIST: { lookupString: "listOf", tailText: "() (kotlin)", typeText: "List<String>" }
// EXIST: { lookupString: "listOf", tailText: "(vararg values: String) (kotlin)", typeText: "List<String>" }
// EXIST: { lookupString: "arrayListOf", tailText: "(vararg values: String!) (kotlin)", typeText: "ArrayList<String!>" }
@@ -0,0 +1,6 @@
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>" }
// ABSENT: filter
@@ -0,0 +1,13 @@
class C<T> {
class object {
fun<T> create(t: T): C<T>{}
}
}
fun foo(c: C<String>){}
fun f(){
foo(<caret>)
}
// EXIST: { lookupString: "create", itemText: "C.create", tailText: "(t: String) (<root>)", typeText: "C<String>" }
@@ -0,0 +1,14 @@
fun<T> emptyList(): List<T> = listOf()
fun foo(list: List<String>){}
fun foo(list: List<String>, i: Int){}
fun foo(list: List<Int>, b: Boolean){}
fun foo(list: List<Int>, c: Char){}
fun f(){
foo(empty<caret>)
}
// EXIST: { lookupString: "emptyList", typeText: "List<String>" }
// EXIST: { lookupString: "emptyList", typeText: "List<Int>" }
// NUMBER: 2
@@ -0,0 +1,16 @@
fun nothingFoo() = throw Exception()
fun<T> genericFoo1(t: T): T = t
fun<T: Any> genericFoo2(t: T): T? = t
fun<T: Runnable> genericFoo3(t: T): T = t
fun foo(): Runnable {
return <caret>
}
// ABSENT: nothingFoo
// ABSENT: genericFoo1
// ABSENT: genericFoo2
// EXIST: { itemText: "genericFoo3", tailText: "(t: Runnable) (<root>)", typeText: "Runnable" }