Initial support for KT-7090 Completion for callable references

#KT-7090 Fixed
This commit is contained in:
Valentin Kipyatkov
2015-09-29 22:42:26 +03:00
parent 7ee65bf41a
commit d38ceb50b6
32 changed files with 630 additions and 159 deletions
@@ -0,0 +1,48 @@
fun globalFun(p: Int) {}
fun String.extensionFun(){}
val String.extensionVal: Int
get() = 1
val globalVal = 1
var globalVar = 1
class C {
fun memberFun(){}
val memberVal = 1
class NestedClass
inner class InnerClass
fun foo() {
fun localFun(){}
val local = 1
val v = ::<caret>
}
companion object {
fun companionObjectFun(){}
}
}
class WithPrivateConstructor private constructor()
abstract class AbstractClass
// EXIST: { itemText: "globalFun", attributes: "" }
// EXIST: { itemText: "globalVal", attributes: "" }
// EXIST: { itemText: "globalVar", attributes: "" }
// ABSENT: extensionFun
// ABSENT: extensionVal
// EXIST: { itemText: "memberFun", attributes: "bold" }
// EXIST: { itemText: "memberVal", attributes: "bold" }
// EXIST: { itemText: "localFun", attributes: "" }
// ABSENT: { itemText: "local", attributes: "" }
// EXIST: { itemText: "companionObjectFun", attributes: "bold" }
// EXIST: { itemText: "C", attributes: "" }
// EXIST: { itemText: "NestedClass", attributes: "" }
// EXIST: { itemText: "InnerClass", attributes: "bold" }
// ABSENT: WithPrivateConstructor
// ABSENT: AbstractClass
@@ -0,0 +1,23 @@
class C {
fun memberFun(){}
val memberVal = 1
class NestedClass
inner class InnerClass
companion object {
fun companionObjectFun(){}
}
}
fun C.foo() {
val v = ::<caret>
}
// EXIST: { itemText: "memberFun", attributes: "bold" }
// EXIST: { itemText: "memberVal", attributes: "bold" }
// EXIST: { itemText: "hashCode", attributes: "" }
// ABSENT: companionObjectFun
// ABSENT: NestedClass
// EXIST: { itemText: "InnerClass", attributes: "bold" }
@@ -0,0 +1,8 @@
fun xfoo(p: (String, Char) -> Unit){}
fun test() {
::xfo<caret>
}
// EXIST: { lookupString:"xfoo", itemText: "xfoo", tailText: "(p: (String, Char) -> Unit) (<root>)", typeText:"Unit" }
// NOTHING_ELSE
@@ -0,0 +1,57 @@
abstract class A {
abstract fun memberFunInA()
abstract val memberValInA: Int
inner class InnerInA
class NestedInA
}
fun A.extensionFun(){}
val A.extensionVal: Int
get() = 1
fun Any.anyExtensionFun(){}
fun String.wrongExtensionFun(){}
fun globalFun(p: Int) {}
val globalVal = 1
class C {
fun memberFun(){}
val memberVal = 1
fun A.memberExtensionFun(){}
fun foo() {
fun localFun(){}
val v = A::<caret>
}
companion object {
fun companionObjectFun(){}
fun A.companionExtension(){}
}
}
/* TODO // EXIST: class */
/* TODO // EXIST: class.java */
// EXIST: { itemText: "memberFunInA", attributes: "bold" }
// EXIST: { itemText: "memberValInA", attributes: "bold" }
// EXIST: { itemText: "InnerInA", attributes: "bold" }
// EXIST: { itemText: "NestedInA", attributes: "" }
// EXIST: { itemText: "extensionFun", attributes: "bold" }
// EXIST: { itemText: "extensionVal", attributes: "bold" }
// EXIST: { itemText: "anyExtensionFun", attributes: "" }
// ABSENT: wrongExtensionFun
// ABSENT: globalFun
// ABSENT: globalVal
// ABSENT: memberFun
// ABSENT: memberVal
// ABSENT: memberExtensionFun
// ABSENT: localFun
// ABSENT: companionObjectFun
// ABSENT: companionExtension
@@ -0,0 +1,31 @@
interface I1 {
fun i1Member()
}
interface I2 {
fun i2Member()
}
fun I1.i1Extension(){}
fun I2.i2Extension(){}
fun Any.anyExtension(){}
fun String.stringExtension(){}
open class C {
fun cMember(){}
fun foo() {
if (this is I1 && this is I2) {
val v = ::<caret>
}
}
}
// EXIST: { itemText: "i1Extension", attributes: "bold" }
// EXIST: { itemText: "i2Extension", attributes: "bold" }
// EXIST: { itemText: "i1Member", attributes: "bold" }
// EXIST: { itemText: "i2Member", attributes: "bold" }
// EXIST: { itemText: "anyExtension", attributes: "" }
// EXIST: { itemText: "hashCode", attributes: "" }
// ABSENT: stringExtension
// EXIST: { itemText: "cMember", attributes: "bold" }
@@ -0,0 +1,7 @@
import java.io.File
val v = File::<caret>
// EXIST_JAVA_ONLY: { itemText: "freeSpace", tailText: " (from getFreeSpace())", attributes: "bold" }
// EXIST_JAVA_ONLY: { itemText: "isFile", tailText: " (from isFile())", attributes: "bold" }
// ABSENT: { itemText: "isFile", tailText: "()" }
@@ -0,0 +1,9 @@
import java.io.File
class MyFile : File("") {
val v = ::<caret>
}
// EXIST_JAVA_ONLY: { itemText: "freeSpace", tailText: " (from getFreeSpace())", attributes: "" }
// EXIST_JAVA_ONLY: { itemText: "isFile", tailText: " (from isFile())", attributes: "" }
// ABSENT: { itemText: "isFile", tailText: "()" }