More correct completion of overrides in constructor parameters - '$' character confuses parser

This commit is contained in:
Valentin Kipyatkov
2015-10-29 18:46:10 +03:00
parent c2cf95bcd4
commit d38b3146db
3 changed files with 13 additions and 15 deletions
@@ -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)
}
@@ -1,12 +1,11 @@
package ppp
interface I {
val p: Nested
interface Nested
val p: CCCC.Nested
}
class CCCC(over<caret>val x: Int) : I {
interface Nested
}
// ELEMENT_TEXT: "override val p: I.Nested"
// ELEMENT_TEXT: "override val p: CCCC.Nested"
@@ -1,12 +1,11 @@
package ppp
interface I {
val p: Nested
val p: CCCC.Nested
}
class CCCC(override val p: CCCC.Nested<caret>val x: Int) : I {
interface Nested
}
class CCCC(override val p: I.Nested<caret>val x: Int) : I {
}
// ELEMENT_TEXT: "override val p: I.Nested"
// ELEMENT_TEXT: "override val p: CCCC.Nested"