From 4a7d4dffdf241d6ca0bb6fd8bc1b0c47c9fcd02d Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Fri, 30 May 2014 19:28:06 +0400 Subject: [PATCH] Fixed KT-5142 Code completion of parameter type inserts FQ-name #KT-5142 Fixed --- .../handlers/JetClassInsertHandler.java | 15 +++++++-------- .../testData/completion/handlers/ParameterType.kt | 2 ++ .../completion/handlers/ParameterType.kt.after | 2 ++ .../handlers/BasicCompletionHandlerTest.kt | 2 ++ 4 files changed, 13 insertions(+), 8 deletions(-) create mode 100644 idea/testData/completion/handlers/ParameterType.kt create mode 100644 idea/testData/completion/handlers/ParameterType.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 abf7f11ecc3..54654516c67 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/handlers/JetClassInsertHandler.java +++ b/idea/src/org/jetbrains/jet/plugin/completion/handlers/JetClassInsertHandler.java @@ -43,23 +43,22 @@ public class JetClassInsertHandler implements InsertHandler { int startOffset = context.getStartOffset(); Document document = context.getDocument(); if (!isAfterDot(document, startOffset)) { - String text = DescriptorUtils.getFqName(descriptor).asString(); + String fqName = DescriptorUtils.getFqName(descriptor).asString(); // insert dot after because otherwise parser can sometimes produce no suitable reference here - document.replaceString(startOffset, context.getTailOffset(), text + "."); + String tempSuffix = ".xxx"; // we add "xxx" after dot because of some bugs in resolve (see KT-5145) + document.replaceString(startOffset, context.getTailOffset(), fqName + tempSuffix); + int classNameEnd = startOffset + fqName.length(); PsiDocumentManager psiDocumentManager = PsiDocumentManager.getInstance(context.getProject()); psiDocumentManager.commitAllDocuments(); - RangeMarker rangeMarker = document.createRangeMarker(startOffset, startOffset + text.length()); + RangeMarker rangeMarker = document.createRangeMarker(classNameEnd, classNameEnd + tempSuffix.length()); - ShortenReferences.instance$.process((JetFile) context.getFile(), startOffset, startOffset + text.length()); + ShortenReferences.instance$.process((JetFile) context.getFile(), startOffset, classNameEnd); psiDocumentManager.commitAllDocuments(); psiDocumentManager.doPostponedOperationsAndUnblockDocument(document); if (rangeMarker.isValid()) { - int endOffset = rangeMarker.getEndOffset(); - if (endOffset < document.getTextLength() && document.getCharsSequence().charAt(endOffset) == '.') { - document.deleteString(endOffset, endOffset + 1); - } + document.deleteString(rangeMarker.getStartOffset(), rangeMarker.getEndOffset()); } } } diff --git a/idea/testData/completion/handlers/ParameterType.kt b/idea/testData/completion/handlers/ParameterType.kt new file mode 100644 index 00000000000..dba6e330fbc --- /dev/null +++ b/idea/testData/completion/handlers/ParameterType.kt @@ -0,0 +1,2 @@ +fun foo(p: StringB) { +} \ No newline at end of file diff --git a/idea/testData/completion/handlers/ParameterType.kt.after b/idea/testData/completion/handlers/ParameterType.kt.after new file mode 100644 index 00000000000..274e694f6b6 --- /dev/null +++ b/idea/testData/completion/handlers/ParameterType.kt.after @@ -0,0 +1,2 @@ +fun foo(p: StringBuilder) { +} \ 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 f89d5217b1a..6614e3ecddd 100644 --- a/idea/tests/org/jetbrains/jet/completion/handlers/BasicCompletionHandlerTest.kt +++ b/idea/tests/org/jetbrains/jet/completion/handlers/BasicCompletionHandlerTest.kt @@ -137,4 +137,6 @@ public class BasicCompletionHandlerTest : CompletionHandlerTestBase(){ fun testEnumMember() = doTest(1, "A", null, '\n') fun testEnumMember1() = doTest(1, "A", null, '\n') fun testClassFromClassObject() = doTest(1, "Some", null, '\n') + + fun testParameterType() = doTest(1, "StringBuilder", " (java.lang)", '\n') } \ No newline at end of file