KT-9666 Inner classes do not appear in type completion

#KT-9666
This commit is contained in:
Valentin Kipyatkov
2015-10-20 15:10:52 +03:00
parent 375ecb4026
commit 255373162d
12 changed files with 49 additions and 13 deletions
@@ -75,11 +75,24 @@ class QualifierReceiver (
override var resultingDescriptor: DeclarationDescriptor by Delegates.notNull()
override val scope: KtScope get() {
val classObjectTypeScope = (classifier as? ClassDescriptor)?.classObjectType?.getMemberScope()?.let {
val scopes = ArrayList<KtScope>(4)
val classObjectTypeScope = (classifier as? ClassDescriptor)?.classObjectType?.memberScope?.let {
FilteringScope(it) { it !is ClassDescriptor }
}
val scopes = listOf(classObjectTypeScope, getNestedClassesAndPackageMembersScope()).filterNotNull().toTypedArray()
return ChainedScope(descriptor, "Member scope for " + name + " as package or class or object", *scopes)
scopes.addIfNotNull(classObjectTypeScope)
scopes.addIfNotNull(packageView?.memberScope)
if (classifier is ClassDescriptor) {
scopes.add(classifier.staticScope)
if (classifier.kind != ClassKind.ENUM_ENTRY) {
scopes.add(classifier.unsubstitutedInnerClassesScope)
}
}
return ChainedScope(descriptor, "Member scope for $name as package or class or object", *scopes.toTypedArray())
}
fun getClassObjectReceiver(): ReceiverValue =
@@ -33,7 +33,7 @@ fun f() {
A().Inner()
A.Companion.<!UNRESOLVED_REFERENCE!>Nested<!>
A.Companion.<!UNRESOLVED_REFERENCE!>Inner<!>
A.<!UNRESOLVED_REFERENCE!>Inner<!>
A.<!NO_COMPANION_OBJECT!>Inner<!>
A.Companion.c
A.Companion.Obj2
A.Companion.Obj2.c
@@ -42,7 +42,7 @@ fun f() {
C.O
C.O.InO
C.A()
C.<!UNRESOLVED_REFERENCE!>B<!>()
C.<!NO_COMPANION_OBJECT, FUNCTION_EXPECTED!>B<!>()
C.E3.<!UNRESOLVED_REFERENCE!>O_O<!>
C.E3.<!UNRESOLVED_REFERENCE!>G<!>()
@@ -11,7 +11,7 @@ class Outer {
fun f1() = Outer()
fun f2() = Outer.Nested()
fun f3() = Outer.Nested.NestedNested()
fun f4() = Outer.<!UNRESOLVED_REFERENCE!>Inner<!>()
fun f5() = Outer.<!UNRESOLVED_REFERENCE!>Inner<!>.<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>InnerInner<!>()
fun f4() = Outer.<!NO_COMPANION_OBJECT, FUNCTION_EXPECTED!>Inner<!>()
fun f5() = Outer.Inner.<!NO_COMPANION_OBJECT, FUNCTION_EXPECTED!>InnerInner<!>()
fun f6() = Outer().Inner()
fun f7() = Outer().Inner().InnerInner()
fun f7() = Outer().Inner().InnerInner()
@@ -4,7 +4,7 @@ public fun f1(): Outer
public fun f2(): Outer.Nested
public fun f3(): Outer.Nested.NestedNested
public fun f4(): [ERROR : Error function type]
public fun f5(): [ERROR : <ERROR FUNCTION RETURN TYPE>]
public fun f5(): [ERROR : Error function type]
public fun f6(): Outer.Inner
public fun f7(): Outer.Inner.InnerInner
+1 -1
View File
@@ -12,5 +12,5 @@ class C {
fun f() {
<!NO_COMPANION_OBJECT, FUNCTION_EXPECTED!>TestInterface<!>()
C.<!UNRESOLVED_REFERENCE!>I<!>()
C.<!NO_COMPANION_OBJECT, FUNCTION_EXPECTED!>I<!>()
}
@@ -46,7 +46,7 @@ class Y: B() {
init {
B_()
B.<!UNRESOLVED_REFERENCE!>B_<!>()
B.<!NO_COMPANION_OBJECT, FUNCTION_EXPECTED!>B_<!>()
Y.<!UNRESOLVED_REFERENCE!>B_<!>()
B_S()
@@ -36,7 +36,7 @@ public class F extends D {
class X: D() {
init {
B_()
B.<!UNRESOLVED_REFERENCE!>B_<!>()
B.<!NO_COMPANION_OBJECT, FUNCTION_EXPECTED!>B_<!>()
C.<!UNRESOLVED_REFERENCE!>B_<!>()
D.<!UNRESOLVED_REFERENCE!>B_<!>()
X.<!UNRESOLVED_REFERENCE!>B_<!>()
@@ -0,0 +1,11 @@
class AAA {
class Nested
inner class Inner
}
fun a(a: AAA.<caret>) {
}
// EXIST: Nested
// EXIST: Inner
// NOTHING_ELSE
@@ -439,6 +439,12 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes
doTest(fileName);
}
@TestMetadata("InnerClass.kt")
public void testInnerClass() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/InnerClass.kt");
doTest(fileName);
}
@TestMetadata("InsideAnonymousClass.kt")
public void testInsideAnonymousClass() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/InsideAnonymousClass.kt");
@@ -439,6 +439,12 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT
doTest(fileName);
}
@TestMetadata("InnerClass.kt")
public void testInnerClass() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/InnerClass.kt");
doTest(fileName);
}
@TestMetadata("InsideAnonymousClass.kt")
public void testInsideAnonymousClass() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/InsideAnonymousClass.kt");
@@ -1,5 +1,5 @@
import B.*
fun bar() {
val t: C.A = B.C.A()
val t: C.A = C.A()
}