diff --git a/idea/src/org/jetbrains/jet/plugin/completion/handlers/JetClassInsertHandler.java b/idea/src/org/jetbrains/jet/plugin/completion/handlers/JetClassInsertHandler.java index fe25b335ba8..2c7d11a2cf7 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/handlers/JetClassInsertHandler.java +++ b/idea/src/org/jetbrains/jet/plugin/completion/handlers/JetClassInsertHandler.java @@ -19,54 +19,33 @@ package org.jetbrains.jet.plugin.completion.handlers; import com.intellij.codeInsight.completion.InsertHandler; import com.intellij.codeInsight.completion.InsertionContext; import com.intellij.codeInsight.lookup.LookupElement; -import com.intellij.openapi.application.ApplicationManager; import com.intellij.psi.PsiDocumentManager; -import com.intellij.psi.PsiElement; +import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.resolve.DescriptorUtils; -import org.jetbrains.jet.lang.resolve.name.FqName; +import org.jetbrains.jet.plugin.codeInsight.ShortenReferences; import org.jetbrains.jet.plugin.completion.JetLookupObject; -import org.jetbrains.jet.plugin.project.ProjectStructureUtil; -import org.jetbrains.jet.plugin.quickfix.ImportInsertHelper; public class JetClassInsertHandler implements InsertHandler { public static final InsertHandler INSTANCE = new JetClassInsertHandler(); @Override - public void handleInsert(final InsertionContext context, final LookupElement item) { - PsiDocumentManager.getInstance(context.getProject()).commitAllDocuments(); - + public void handleInsert(@NotNull InsertionContext context, @NotNull LookupElement item) { if (context.getFile() instanceof JetFile) { - final JetFile jetFile = (JetFile) context.getFile(); - ApplicationManager.getApplication().runReadAction(new Runnable() { - @Override - public void run() { + if (item.getObject() instanceof JetLookupObject) { + JetLookupObject lookupObject = (JetLookupObject)item.getObject(); + DeclarationDescriptor descriptor = lookupObject.getDescriptor(); + if (descriptor != null) { + String text = DescriptorUtils.getFqName(descriptor).asString(); int startOffset = context.getStartOffset(); - PsiElement element = context.getFile().findElementAt(startOffset); - if (element == null) { - return; - } + context.getDocument().replaceString(startOffset, context.getTailOffset(), text); - if (context.getFile() instanceof JetFile && item.getObject() instanceof JetLookupObject) { - JetLookupObject lookupObject = (JetLookupObject)item.getObject(); - DeclarationDescriptor descriptor = lookupObject.getDescriptor(); - PsiElement targetElement = lookupObject.getPsiElement(); - if (descriptor != null) { - FqName fqn = DescriptorUtils.getFqNameSafe(descriptor); - - // TODO: Find out the way for getting psi element for JS libs - if (targetElement != null) { - ImportInsertHelper.addImportDirectiveOrChangeToFqName(fqn, jetFile, context.getStartOffset(), targetElement); - } - else if (ProjectStructureUtil.isJsKotlinModule(jetFile)) { - ImportInsertHelper.addImportDirectiveIfNeeded(fqn, jetFile); - } - } - } + PsiDocumentManager.getInstance(context.getProject()).commitAllDocuments(); + ShortenReferences.instance$.process((JetFile) context.getFile(), startOffset, startOffset + text.length()); } - }); + } } } } diff --git a/idea/testData/completion/handlers/Object.kt b/idea/testData/completion/handlers/Object.kt new file mode 100644 index 00000000000..fe33ad532a0 --- /dev/null +++ b/idea/testData/completion/handlers/Object.kt @@ -0,0 +1,5 @@ +package foo + +object Unique + +val t = Unique diff --git a/idea/testData/completion/handlers/Object.kt.after b/idea/testData/completion/handlers/Object.kt.after new file mode 100644 index 00000000000..fe33ad532a0 --- /dev/null +++ b/idea/testData/completion/handlers/Object.kt.after @@ -0,0 +1,5 @@ +package foo + +object Unique + +val t = Unique diff --git a/idea/testData/completion/handlers/multifile/ImportAlreadyImportedObject-1.kt b/idea/testData/completion/handlers/multifile/ImportAlreadyImportedObject-1.kt index bfad0cfbd8f..2fcd84a7022 100644 --- a/idea/testData/completion/handlers/multifile/ImportAlreadyImportedObject-1.kt +++ b/idea/testData/completion/handlers/multifile/ImportAlreadyImportedObject-1.kt @@ -3,5 +3,5 @@ package some import test.SomeTestObject fun test() { - SomeTestObject + SomeTestObject } \ No newline at end of file diff --git a/idea/testData/completion/handlers/multifile/ImportAlreadyImportedObject.kt.after b/idea/testData/completion/handlers/multifile/ImportAlreadyImportedObject.kt.after index bfad0cfbd8f..2fcd84a7022 100644 --- a/idea/testData/completion/handlers/multifile/ImportAlreadyImportedObject.kt.after +++ b/idea/testData/completion/handlers/multifile/ImportAlreadyImportedObject.kt.after @@ -3,5 +3,5 @@ package some import test.SomeTestObject fun test() { - SomeTestObject + SomeTestObject } \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/completion/handlers/BasicCompletionHandlerTest.kt b/idea/tests/org/jetbrains/jet/completion/handlers/BasicCompletionHandlerTest.kt index c9412ae6897..64fd578dd6c 100644 --- a/idea/tests/org/jetbrains/jet/completion/handlers/BasicCompletionHandlerTest.kt +++ b/idea/tests/org/jetbrains/jet/completion/handlers/BasicCompletionHandlerTest.kt @@ -107,4 +107,6 @@ public class BasicCompletionHandlerTest : CompletionHandlerTestBase(){ jetSettings.INSERT_WHITESPACES_IN_SIMPLE_ONE_LINE_METHOD = true } } + + fun testObject() = doTest() } \ No newline at end of file