From 0e86e628a3850ab271b59437024f85c8a9731296 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Mon, 12 May 2014 20:20:28 +0400 Subject: [PATCH] KT-5012 Autocompletion is completing to FQN and not the value #KT-5012 Fixed #KT-5006 Fixed --- .../handlers/JetClassInsertHandler.java | 24 +++++++++++++++---- .../completion/handlers/EnumMember.kt | 9 +++++++ .../completion/handlers/EnumMember.kt.after | 9 +++++++ .../completion/handlers/EnumMember1.kt | 9 +++++++ .../completion/handlers/EnumMember1.kt.after | 9 +++++++ .../handlers/BasicCompletionHandlerTest.kt | 3 +++ 6 files changed, 59 insertions(+), 4 deletions(-) create mode 100644 idea/testData/completion/handlers/EnumMember.kt create mode 100644 idea/testData/completion/handlers/EnumMember.kt.after create mode 100644 idea/testData/completion/handlers/EnumMember1.kt create mode 100644 idea/testData/completion/handlers/EnumMember1.kt.after 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 2c7d11a2cf7..024b7258d7a 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/handlers/JetClassInsertHandler.java +++ b/idea/src/org/jetbrains/jet/plugin/completion/handlers/JetClassInsertHandler.java @@ -19,6 +19,7 @@ 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.editor.Document; import com.intellij.psi.PsiDocumentManager; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; @@ -38,14 +39,29 @@ public class JetClassInsertHandler implements InsertHandler { JetLookupObject lookupObject = (JetLookupObject)item.getObject(); DeclarationDescriptor descriptor = lookupObject.getDescriptor(); if (descriptor != null) { - String text = DescriptorUtils.getFqName(descriptor).asString(); int startOffset = context.getStartOffset(); - context.getDocument().replaceString(startOffset, context.getTailOffset(), text); + Document document = context.getDocument(); + if (!isAfterDot(document, startOffset)) { + String text = DescriptorUtils.getFqName(descriptor).asString(); + document.replaceString(startOffset, context.getTailOffset(), text); - PsiDocumentManager.getInstance(context.getProject()).commitAllDocuments(); - ShortenReferences.instance$.process((JetFile) context.getFile(), startOffset, startOffset + text.length()); + PsiDocumentManager.getInstance(context.getProject()).commitAllDocuments(); + ShortenReferences.instance$.process((JetFile) context.getFile(), startOffset, startOffset + text.length()); + } } } } } + + private static boolean isAfterDot(Document document, int offset) { + CharSequence chars = document.getCharsSequence(); + while(offset > 0) { + offset--; + char c = chars.charAt(offset); + if (!Character.isWhitespace(c)) { + return c == '.'; + } + } + return false; + } } diff --git a/idea/testData/completion/handlers/EnumMember.kt b/idea/testData/completion/handlers/EnumMember.kt new file mode 100644 index 00000000000..984e3499ca6 --- /dev/null +++ b/idea/testData/completion/handlers/EnumMember.kt @@ -0,0 +1,9 @@ +enum class E { + A + B + C +} + +fun foo() { + val e = E. +} diff --git a/idea/testData/completion/handlers/EnumMember.kt.after b/idea/testData/completion/handlers/EnumMember.kt.after new file mode 100644 index 00000000000..209fde04809 --- /dev/null +++ b/idea/testData/completion/handlers/EnumMember.kt.after @@ -0,0 +1,9 @@ +enum class E { + A + B + C +} + +fun foo() { + val e = E.A +} diff --git a/idea/testData/completion/handlers/EnumMember1.kt b/idea/testData/completion/handlers/EnumMember1.kt new file mode 100644 index 00000000000..b5389b813bf --- /dev/null +++ b/idea/testData/completion/handlers/EnumMember1.kt @@ -0,0 +1,9 @@ +enum class E { + A + B + C +} + +fun foo() { + val e = E. +} diff --git a/idea/testData/completion/handlers/EnumMember1.kt.after b/idea/testData/completion/handlers/EnumMember1.kt.after new file mode 100644 index 00000000000..47843d0015c --- /dev/null +++ b/idea/testData/completion/handlers/EnumMember1.kt.after @@ -0,0 +1,9 @@ +enum class E { + A + B + C +} + +fun foo() { + val e = E. A +} diff --git a/idea/tests/org/jetbrains/jet/completion/handlers/BasicCompletionHandlerTest.kt b/idea/tests/org/jetbrains/jet/completion/handlers/BasicCompletionHandlerTest.kt index c0713e6d9c2..4371424a477 100644 --- a/idea/tests/org/jetbrains/jet/completion/handlers/BasicCompletionHandlerTest.kt +++ b/idea/tests/org/jetbrains/jet/completion/handlers/BasicCompletionHandlerTest.kt @@ -125,4 +125,7 @@ public class BasicCompletionHandlerTest : CompletionHandlerTestBase(){ } fun testObject() = doTest() + + fun testEnumMember() = doTest(1, "A", null, '\n') + fun testEnumMember1() = doTest(1, "A", null, '\n') } \ No newline at end of file