Smart completion: no instantiation of anonymous object with uninferred type arguments in code

This commit is contained in:
Valentin Kipyatkov
2015-09-03 21:33:02 +03:00
parent 40de063ebd
commit fe3e9341a1
12 changed files with 238 additions and 41 deletions
@@ -0,0 +1,9 @@
interface A<T>
fun <T> foo(a: A<T>){}
fun g() {
foo(<caret>)
}
// EXIST: { lookupString:"object", itemText:"object: A<...>{...}" }
@@ -0,0 +1,16 @@
interface I<T>
abstract class C1<T> : I<T>
abstract class C2 : I<String>
abstract class C3 : I<Int>
fun foo(i: I<Int>){}
fun bar() {
foo(<caret>)
}
// EXIST: { itemText: "object: I<Int>{...}" }
// EXIST: { itemText: "object: C1<Int>(){...}" }
// EXIST: { itemText: "object: C3(){...}" }
// NOTHING_ELSE
@@ -0,0 +1,17 @@
interface I<T>
abstract class C1<T> : I<T>
abstract class C2 : I<String>
abstract class C3 : I<Int>
fun <T> foo(i: I<T>){}
fun bar() {
foo(<caret>)
}
// EXIST: { itemText: "object: I<...>{...}" }
// EXIST: { itemText: "object: C1<...>(){...}" }
// EXIST: { itemText: "object: C2(){...}" }
// EXIST: { itemText: "object: C3(){...}" }
// NOTHING_ELSE
@@ -0,0 +1,18 @@
interface I<T1, T2>
abstract class C1<T> : I<T, String>
abstract class C2 : I<Int, String>
abstract class C3 : I<String, Int>
abstract class C4<T> : I<String, T>
fun <T> foo(i: I<T, String>){}
fun bar() {
foo(<caret>)
}
// EXIST: { itemText: "object: I<...>{...}" }
// EXIST: { itemText: "object: C1<...>(){...}" }
// EXIST: { itemText: "object: C2(){...}" }
// EXIST: { itemText: "object: C4<String>(){...}" }
// NOTHING_ELSE
@@ -0,0 +1,13 @@
interface I<T1>
abstract class C<T1, T2> : I<T1>
fun <T> foo(i: I<T>){}
fun bar() {
foo(<caret>)
}
// EXIST: { itemText: "object: I<...>{...}" }
// EXIST: { itemText: "object: C<...>(){...}" }
// NOTHING_ELSE
@@ -0,0 +1,13 @@
interface I<T1>
abstract class C<T1, T2> : I<T1>
fun foo(i: I<String>){}
fun bar() {
foo(<caret>)
}
// EXIST: { itemText: "object: I<String>{...}" }
// EXIST: { itemText: "object: C<...>(){...}" }
// NOTHING_ELSE
@@ -0,0 +1,20 @@
interface X
interface Y : X
interface Z
interface I<T>
abstract class C1<T> : I<T>
abstract class C2 : I<Y>
abstract class C3 : I<Z>
fun <T : X> foo(i: I<T>){}
fun bar() {
foo(<caret>)
}
// EXIST: { itemText: "object: I<...>{...}" }
// EXIST: { itemText: "object: C1<X>(){...}" }
// EXIST: { itemText: "object: C2(){...}" }
// NOTHING_ELSE