diff --git a/idea/src/org/jetbrains/jet/plugin/completion/handlers/KotlinClassInsertHandler.kt b/idea/src/org/jetbrains/jet/plugin/completion/handlers/KotlinClassInsertHandler.kt index 63260f96fa0..3e8557165da 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/handlers/KotlinClassInsertHandler.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/handlers/KotlinClassInsertHandler.kt @@ -31,6 +31,7 @@ import org.jetbrains.jet.plugin.caches.resolve.getResolutionFacade import org.jetbrains.jet.lang.resolve.BindingContext import org.jetbrains.jet.lang.resolve.DescriptorUtils import org.jetbrains.jet.lang.resolve.lazy.BodyResolveMode +import org.jetbrains.jet.lang.descriptors.ClassKind public object KotlinClassInsertHandler : BaseDeclarationInsertHandler() { override fun handleInsert(context: InsertionContext, item: LookupElement) { @@ -52,7 +53,13 @@ public object KotlinClassInsertHandler : BaseDeclarationInsertHandler() { if (nameRef != null) { val bindingContext = nameRef.getResolutionFacade().analyze(nameRef, BodyResolveMode.PARTIAL) val target = bindingContext[BindingContext.REFERENCE_TARGET, nameRef] as? ClassDescriptor - if (target != null && DescriptorUtils.getFqNameSafe(target).asString() == qualifiedName) return + if (target != null) { + val realTarget = if (target.getKind() == ClassKind.CLASS_OBJECT) + target.getContainingDeclaration() as ClassDescriptor + else + target + if (DescriptorUtils.getFqName(realTarget).asString() == qualifiedName) return + } } val tempPrefix = if (nameRef != null) diff --git a/idea/testData/completion/handlers/basic/ClassWithClassObject.kt b/idea/testData/completion/handlers/basic/ClassWithClassObject.kt new file mode 100644 index 00000000000..6f57db722b3 --- /dev/null +++ b/idea/testData/completion/handlers/basic/ClassWithClassObject.kt @@ -0,0 +1,9 @@ +class AClass { + class object {} +} + +fun foo() { + bar() +} + +// ELEMENT: AClass diff --git a/idea/testData/completion/handlers/basic/ClassWithClassObject.kt.after b/idea/testData/completion/handlers/basic/ClassWithClassObject.kt.after new file mode 100644 index 00000000000..6976def39b0 --- /dev/null +++ b/idea/testData/completion/handlers/basic/ClassWithClassObject.kt.after @@ -0,0 +1,9 @@ +class AClass { + class object {} +} + +fun foo() { + bar(AClass) +} + +// ELEMENT: AClass diff --git a/idea/tests/org/jetbrains/jet/completion/handlers/BasicCompletionHandlerTestGenerated.java b/idea/tests/org/jetbrains/jet/completion/handlers/BasicCompletionHandlerTestGenerated.java index 03970129730..b522d117ff5 100644 --- a/idea/tests/org/jetbrains/jet/completion/handlers/BasicCompletionHandlerTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/completion/handlers/BasicCompletionHandlerTestGenerated.java @@ -36,6 +36,12 @@ public class BasicCompletionHandlerTestGenerated extends AbstractBasicCompletion JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/completion/handlers/basic"), Pattern.compile("^(.+)\\.kt$"), true); } + @TestMetadata("ClassWithClassObject.kt") + public void testClassWithClassObject() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/handlers/basic/ClassWithClassObject.kt"); + doTest(fileName); + } + @TestMetadata("ExtensionReceiverTypeArg.kt") public void testExtensionReceiverTypeArg() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/handlers/basic/ExtensionReceiverTypeArg.kt");