From d38b3146db182ebb30b3b3c019c743dcb352bd80 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Thu, 29 Oct 2015 18:46:10 +0300 Subject: [PATCH] More correct completion of overrides in constructor parameters - '$' character confuses parser --- .../kotlin/idea/completion/OverridesCompletion.kt | 12 ++++++------ .../basic/override/ValInConstructorParameter4.kt | 7 +++---- .../override/ValInConstructorParameter4.kt.after | 9 ++++----- 3 files changed, 13 insertions(+), 15 deletions(-) diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/OverridesCompletion.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/OverridesCompletion.kt index 92abe35f3a0..2fb44f0db71 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/OverridesCompletion.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/OverridesCompletion.kt @@ -30,7 +30,7 @@ import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.PropertyDescriptor import org.jetbrains.kotlin.idea.JetDescriptorIconProvider import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde -import org.jetbrains.kotlin.idea.completion.handlers.skipSpaces +import org.jetbrains.kotlin.idea.completion.handlers.indexOfSkippingSpace import org.jetbrains.kotlin.idea.core.completion.DeclarationLookupObject import org.jetbrains.kotlin.idea.core.overrideImplement.OverrideMembersHandler import org.jetbrains.kotlin.idea.core.overrideImplement.generateMember @@ -102,7 +102,8 @@ class OverridesCompletion( } override fun handleInsert(context: InsertionContext) { - val dummyMemberText = if (isConstructorParameter) "override val dummy: Dummy $" else "override fun dummy() {}" + val chars = context.document.charsSequence + val dummyMemberText = if (isConstructorParameter) "override val dummy: Dummy ,@" else "override fun dummy() {}" context.document.replaceString(context.startOffset, context.tailOffset, dummyMemberText) val psiDocumentManager = PsiDocumentManager.getInstance(context.project) @@ -123,10 +124,9 @@ class OverridesCompletion( psiDocumentManager.doPostponedOperationsAndUnblockDocument(context.document) val offset = insertedMember.endOffset - val chars = context.document.charsSequence - val commaOffset = chars.skipSpaces(offset) - assert(chars[commaOffset] == '$') { "Incorrect char at index: '${chars[commaOffset]}', '$' expected" } - context.document.deleteString(offset, commaOffset + 1) + val commaOffset = chars.indexOfSkippingSpace(',', offset)!! + val atCharOffset = chars.indexOfSkippingSpace('@', commaOffset + 1)!! + context.document.deleteString(offset, atCharOffset + 1) context.editor.moveCaret(offset) } diff --git a/idea/idea-completion/testData/handlers/basic/override/ValInConstructorParameter4.kt b/idea/idea-completion/testData/handlers/basic/override/ValInConstructorParameter4.kt index 45ffee6c486..65b9af33158 100644 --- a/idea/idea-completion/testData/handlers/basic/override/ValInConstructorParameter4.kt +++ b/idea/idea-completion/testData/handlers/basic/override/ValInConstructorParameter4.kt @@ -1,12 +1,11 @@ package ppp interface I { - val p: Nested - - interface Nested + val p: CCCC.Nested } class CCCC(overval x: Int) : I { + interface Nested } -// ELEMENT_TEXT: "override val p: I.Nested" +// ELEMENT_TEXT: "override val p: CCCC.Nested" diff --git a/idea/idea-completion/testData/handlers/basic/override/ValInConstructorParameter4.kt.after b/idea/idea-completion/testData/handlers/basic/override/ValInConstructorParameter4.kt.after index c1312490a3d..6e5d28e85f6 100644 --- a/idea/idea-completion/testData/handlers/basic/override/ValInConstructorParameter4.kt.after +++ b/idea/idea-completion/testData/handlers/basic/override/ValInConstructorParameter4.kt.after @@ -1,12 +1,11 @@ package ppp interface I { - val p: Nested + val p: CCCC.Nested +} +class CCCC(override val p: CCCC.Nestedval x: Int) : I { interface Nested } -class CCCC(override val p: I.Nestedval x: Int) : I { -} - -// ELEMENT_TEXT: "override val p: I.Nested" +// ELEMENT_TEXT: "override val p: CCCC.Nested"