KT-9666 Inner classes do not appear in type completion
#KT-9666
This commit is contained in:
@@ -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 =
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
+1
-1
@@ -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<!>()
|
||||
|
||||
+3
-3
@@ -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()
|
||||
+1
-1
@@ -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
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
+1
-1
@@ -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
|
||||
+6
@@ -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");
|
||||
|
||||
+6
@@ -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
-1
@@ -1,5 +1,5 @@
|
||||
import B.*
|
||||
|
||||
fun bar() {
|
||||
val t: C.A = B.C.A()
|
||||
val t: C.A = C.A()
|
||||
}
|
||||
Reference in New Issue
Block a user