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:
Roman Golyshev
2019-10-07 12:18:32 +03:00
committed by Roman Golyshev
parent 15613afa20
commit 6560ecc82b
31 changed files with 686 additions and 4 deletions
@@ -0,0 +1,12 @@
class T {
companion object {
fun T.foo() {}
}
}
fun usage(t: T) {
t.f<caret>
}
// INVOCATION_COUNT: 2
// ELEMENT: foo
@@ -0,0 +1,14 @@
import T.Companion.foo
class T {
companion object {
fun T.foo() {}
}
}
fun usage(t: T) {
t.foo()<caret>
}
// INVOCATION_COUNT: 2
// ELEMENT: foo
@@ -0,0 +1,12 @@
class T {
companion object {
fun T.foo() {}
}
}
fun T.usage() {
f<caret>
}
// INVOCATION_COUNT: 2
// ELEMENT: foo
@@ -0,0 +1,14 @@
import T.Companion.foo
class T {
companion object {
fun T.foo() {}
}
}
fun T.usage() {
foo()<caret>
}
// INVOCATION_COUNT: 2
// ELEMENT: foo
@@ -0,0 +1,16 @@
class T
class A {
class B {
companion object {
fun T.foo() {}
}
}
}
fun usage(t: T) {
t.f<caret>
}
// INVOCATION_COUNT: 2
// ELEMENT: foo
@@ -0,0 +1,18 @@
import A.B.Companion.foo
class T
class A {
class B {
companion object {
fun T.foo() {}
}
}
}
fun usage(t: T) {
t.foo()<caret>
}
// INVOCATION_COUNT: 2
// ELEMENT: foo
@@ -0,0 +1,16 @@
class T
class A {
class B {
companion object {
fun T.foo() {}
}
}
}
fun T.usage() {
f<caret>
}
// INVOCATION_COUNT: 2
// ELEMENT: foo
@@ -0,0 +1,18 @@
import A.B.Companion.foo
class T
class A {
class B {
companion object {
fun T.foo() {}
}
}
}
fun T.usage() {
foo()<caret>
}
// INVOCATION_COUNT: 2
// ELEMENT: foo
@@ -0,0 +1,14 @@
class T
object TopLevel {
object Nested {
fun T.foo() {}
}
}
fun usage(t: T) {
t.f<caret>
}
// INVOCATION_COUNT: 2
// ELEMENT: foo
@@ -0,0 +1,16 @@
import TopLevel.Nested.foo
class T
object TopLevel {
object Nested {
fun T.foo() {}
}
}
fun usage(t: T) {
t.foo()<caret>
}
// INVOCATION_COUNT: 2
// ELEMENT: foo
@@ -0,0 +1,14 @@
class T
object TopLevel {
object Nested {
fun T.foo() {}
}
}
fun T.usage() {
f<caret>
}
// INVOCATION_COUNT: 2
// ELEMENT: foo
@@ -0,0 +1,16 @@
import TopLevel.Nested.foo
class T
object TopLevel {
object Nested {
fun T.foo() {}
}
}
fun T.usage() {
foo()<caret>
}
// INVOCATION_COUNT: 2
// ELEMENT: foo
@@ -0,0 +1,12 @@
class T
object Extensions {
fun T.foo() {}
}
fun usage(t: T) {
t.f<caret>
}
// INVOCATION_COUNT: 2
// ELEMENT: foo
@@ -0,0 +1,14 @@
import Extensions.foo
class T
object Extensions {
fun T.foo() {}
}
fun usage(t: T) {
t.foo()<caret>
}
// INVOCATION_COUNT: 2
// ELEMENT: foo
@@ -0,0 +1,12 @@
class T
object Extensions {
fun T.foo() {}
}
fun T.usage() {
f<caret>
}
// INVOCATION_COUNT: 2
// ELEMENT: foo
@@ -0,0 +1,14 @@
import Extensions.foo
class T
object Extensions {
fun T.foo() {}
}
fun T.usage() {
foo()<caret>
}
// INVOCATION_COUNT: 2
// ELEMENT: foo