KT-5153 Smart completion should include objects from type

#KT-5153 Fixed
This commit is contained in:
Valentin Kipyatkov
2014-07-24 11:30:23 +02:00
parent be0e78b11a
commit 2b67716e95
6 changed files with 59 additions and 2 deletions
@@ -82,6 +82,11 @@ class StaticMembers(val bindingContext: BindingContext, val resolveSession: Reso
else if (DescriptorUtils.isEnumEntry(descriptor) && !enumEntriesToSkip.contains(descriptor)) {
classifier = { ExpectedInfoClassification.MATCHES } /* we do not need to check type of enum entry because it's taken from proper enum */
}
else if (descriptor is ClassDescriptor && DescriptorUtils.isObject(descriptor)) {
classifier = { expectedInfo ->
if (descriptor.getDefaultType().isSubtypeOf(expectedInfo.`type`)) ExpectedInfoClassification.MATCHES else ExpectedInfoClassification.NOT_MATCHES
}
}
else {
return
}
@@ -101,9 +106,11 @@ class StaticMembers(val bindingContext: BindingContext, val resolveSession: Reso
classObject.getDefaultType().getMemberScope().getAllDescriptors().forEach(::processMember)
}
if (classDescriptor.getKind() == ClassKind.ENUM_CLASS) {
classDescriptor.getDefaultType().getMemberScope().getAllDescriptors().forEach(::processMember)
var members = classDescriptor.getDefaultType().getMemberScope().getAllDescriptors()
if (classDescriptor.getKind() != ClassKind.ENUM_CLASS) {
members = members.filter { DescriptorUtils.isObject(it) }
}
members.forEach(::processMember)
}
private fun createLookupElement(memberDescriptor: DeclarationDescriptor, classDescriptor: ClassDescriptor): LookupElement {
@@ -0,0 +1,13 @@
package p
class Outer {
trait T {
object Null : T { }
}
}
fun foo(): Outer.T {
return <caret>
}
// ELEMENT: "T.Null"
@@ -0,0 +1,13 @@
package p
class Outer {
trait T {
object Null : T { }
}
}
fun foo(): Outer.T {
return Outer.T.Null<caret>
}
// ELEMENT: "T.Null"
@@ -0,0 +1,14 @@
package p
trait T {
object Null : T { }
object Other {}
}
fun foo(): T {
return <caret>
}
// EXIST: { lookupString:"T.Null", itemText:"T.Null", tailText:" (p)", typeText:"T" }
// ABSENT: T.Other
@@ -416,6 +416,11 @@ public class JvmSmartCompletionTestGenerated extends AbstractJvmSmartCompletionT
doTest("idea/testData/completion/smart/NullableThis.kt");
}
@TestMetadata("ObjectsFromType.kt")
public void testObjectsFromType() throws Exception {
doTest("idea/testData/completion/smart/ObjectsFromType.kt");
}
@TestMetadata("OverloadedConstructorArgument.kt")
public void testOverloadedConstructorArgument() throws Exception {
doTest("idea/testData/completion/smart/OverloadedConstructorArgument.kt");
@@ -381,6 +381,11 @@ public class SmartCompletionHandlerTestGenerated extends AbstractSmartCompletion
doTest("idea/testData/completion/handlers/smart/NullableValueKeepOldArguments.kt");
}
@TestMetadata("ObjectFromType.kt")
public void testObjectFromType() throws Exception {
doTest("idea/testData/completion/handlers/smart/ObjectFromType.kt");
}
@TestMetadata("SAMExpected1.kt")
public void testSAMExpected1() throws Exception {
doTest("idea/testData/completion/handlers/smart/SAMExpected1.kt");