KT-15286: Provide object member extensions in the completion
- Add extensions only when completion of static members is enabled (double ctrl + space and nonempty prefix) - Add full import for callables with receiver in `LookupElement.decorateAsStaticMember`
This commit is contained in:
committed by
Roman Golyshev
parent
15613afa20
commit
6560ecc82b
+16
@@ -0,0 +1,16 @@
|
||||
class T
|
||||
|
||||
class A {
|
||||
companion object {
|
||||
fun T.fooExtension() {}
|
||||
val T.fooProperty get() = 10
|
||||
}
|
||||
}
|
||||
|
||||
fun usage(t: T) {
|
||||
t.foo<caret>
|
||||
}
|
||||
|
||||
// INVOCATION_COUNT: 2
|
||||
// EXIST: { lookupString: "fooExtension", itemText: "fooExtension" }
|
||||
// EXIST: { lookupString: "fooProperty", itemText: "fooProperty" }
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
class T
|
||||
|
||||
class A {
|
||||
companion object {
|
||||
fun T.fooExtension() {}
|
||||
val T.fooProperty get() = 10
|
||||
}
|
||||
}
|
||||
|
||||
fun T.usage() {
|
||||
foo<caret>
|
||||
}
|
||||
|
||||
// INVOCATION_COUNT: 2
|
||||
// EXIST: { lookupString: "fooExtension", itemText: "fooExtension" }
|
||||
// EXIST: { lookupString: "fooProperty", itemText: "fooProperty" }
|
||||
Vendored
+35
@@ -0,0 +1,35 @@
|
||||
interface T
|
||||
interface B: T
|
||||
interface C: T
|
||||
|
||||
object A {
|
||||
fun Any.fooForAny() {}
|
||||
|
||||
fun T.fooForT() {}
|
||||
fun B.fooForB() {}
|
||||
fun C.fooForC() {}
|
||||
|
||||
fun <TT> TT.fooForAnyGeneric() {}
|
||||
fun <TT: T> TT.fooForTGeneric() {}
|
||||
fun <TT: B> TT.fooForBGeneric() {}
|
||||
fun <TT: C> TT.fooForCGeneric() {}
|
||||
|
||||
fun fooNoReceiver() {}
|
||||
}
|
||||
|
||||
fun usage(b: B) {
|
||||
b.foo<caret>
|
||||
}
|
||||
|
||||
// INVOCATION_COUNT: 2
|
||||
// EXIST: { lookupString: "fooForAny", itemText: "fooForAny" }
|
||||
|
||||
// EXIST: { lookupString: "fooForT", itemText: "fooForT" }
|
||||
// EXIST: { lookupString: "fooForB", itemText: "fooForB" }
|
||||
|
||||
// EXIST: { lookupString: "fooForTGeneric", itemText: "fooForTGeneric" }
|
||||
// EXIST: { lookupString: "fooForBGeneric", itemText: "fooForBGeneric" }
|
||||
|
||||
// ABSENT: fooForC
|
||||
// ABSENT: fooForCGeneric
|
||||
// ABSENT: fooNoReceiver
|
||||
Vendored
+36
@@ -0,0 +1,36 @@
|
||||
interface T
|
||||
interface B: T
|
||||
interface C: T
|
||||
|
||||
object A {
|
||||
fun Any.fooForAny() {}
|
||||
|
||||
fun T.fooForT() {}
|
||||
fun B.fooForB() {}
|
||||
fun C.fooForC() {}
|
||||
|
||||
fun <TT> TT.fooForAnyGeneric() {}
|
||||
fun <TT: T> TT.fooForTGeneric() {}
|
||||
fun <TT: B> TT.fooForBGeneric() {}
|
||||
fun <TT: C> TT.fooForCGeneric() {}
|
||||
|
||||
fun fooNoReceiver() {}
|
||||
}
|
||||
|
||||
fun B.usage() {
|
||||
foo<caret>
|
||||
}
|
||||
|
||||
// INVOCATION_COUNT: 2
|
||||
// EXIST: { lookupString: "fooForAny", itemText: "fooForAny" }
|
||||
|
||||
// EXIST: { lookupString: "fooForT", itemText: "fooForT" }
|
||||
// EXIST: { lookupString: "fooForB", itemText: "fooForB" }
|
||||
|
||||
// EXIST: { lookupString: "fooForTGeneric", itemText: "fooForTGeneric" }
|
||||
// EXIST: { lookupString: "fooForBGeneric", itemText: "fooForBGeneric" }
|
||||
|
||||
// EXIST: fooNoReceiver
|
||||
|
||||
// ABSENT: fooForC
|
||||
// ABSENT: fooForCGeneric
|
||||
Vendored
+24
@@ -0,0 +1,24 @@
|
||||
class T
|
||||
|
||||
object O {
|
||||
fun A.fooForA() {}
|
||||
fun A.B.fooForB() {}
|
||||
fun A.B.C.fooForC() {}
|
||||
fun T.fooForT() {}
|
||||
}
|
||||
|
||||
class A {
|
||||
inner class B {
|
||||
fun T.usage() {
|
||||
foo<caret>
|
||||
}
|
||||
|
||||
inner class C {}
|
||||
}
|
||||
}
|
||||
|
||||
// INVOCATION_COUNT: 2
|
||||
// EXIST: { lookupString: "fooForA", itemText: "fooForA" }
|
||||
// EXIST: { lookupString: "fooForB", itemText: "fooForB" }
|
||||
// EXIST: { lookupString: "fooForT", itemText: "fooForT" }
|
||||
// ABSENT: fooForC
|
||||
Vendored
+14
@@ -0,0 +1,14 @@
|
||||
class T
|
||||
|
||||
object A {
|
||||
fun T.fooExtension() {}
|
||||
val T.fooProperty get() = 10
|
||||
}
|
||||
|
||||
fun usage(t: T) {
|
||||
t.foo<caret>
|
||||
}
|
||||
|
||||
// INVOCATION_COUNT: 2
|
||||
// EXIST: { lookupString: "fooExtension", itemText: "fooExtension" }
|
||||
// EXIST: { lookupString: "fooProperty", itemText: "fooProperty" }
|
||||
Vendored
+14
@@ -0,0 +1,14 @@
|
||||
class T
|
||||
|
||||
object A {
|
||||
fun T.fooExtension() {}
|
||||
val T.fooProperty get() = 10
|
||||
}
|
||||
|
||||
fun T.usage() {
|
||||
foo<caret>
|
||||
}
|
||||
|
||||
// INVOCATION_COUNT: 2
|
||||
// EXIST: { lookupString: "fooExtension", itemText: "fooExtension" }
|
||||
// EXIST: { lookupString: "fooProperty", itemText: "fooProperty" }
|
||||
Vendored
+19
@@ -0,0 +1,19 @@
|
||||
class T
|
||||
|
||||
interface Foo {
|
||||
fun T.fooExtension()
|
||||
val T.fooProperty: Int
|
||||
}
|
||||
|
||||
object A : Foo {
|
||||
override fun T.fooExtension() {}
|
||||
override val T.fooProperty get() = 10
|
||||
}
|
||||
|
||||
fun T.usage() {
|
||||
foo<caret>
|
||||
}
|
||||
|
||||
// INVOCATION_COUNT: 2
|
||||
// EXIST: { lookupString: "fooExtension", itemText: "fooExtension" }
|
||||
// EXIST: { lookupString: "fooProperty", itemText: "fooProperty" }
|
||||
Reference in New Issue
Block a user