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