More correct completion of overrides in constructor parameters - '$' character confuses parser
This commit is contained in:
+6
-6
@@ -30,7 +30,7 @@ import org.jetbrains.kotlin.descriptors.Modality
|
|||||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||||
import org.jetbrains.kotlin.idea.JetDescriptorIconProvider
|
import org.jetbrains.kotlin.idea.JetDescriptorIconProvider
|
||||||
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
|
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.completion.DeclarationLookupObject
|
||||||
import org.jetbrains.kotlin.idea.core.overrideImplement.OverrideMembersHandler
|
import org.jetbrains.kotlin.idea.core.overrideImplement.OverrideMembersHandler
|
||||||
import org.jetbrains.kotlin.idea.core.overrideImplement.generateMember
|
import org.jetbrains.kotlin.idea.core.overrideImplement.generateMember
|
||||||
@@ -102,7 +102,8 @@ class OverridesCompletion(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun handleInsert(context: InsertionContext) {
|
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)
|
context.document.replaceString(context.startOffset, context.tailOffset, dummyMemberText)
|
||||||
|
|
||||||
val psiDocumentManager = PsiDocumentManager.getInstance(context.project)
|
val psiDocumentManager = PsiDocumentManager.getInstance(context.project)
|
||||||
@@ -123,10 +124,9 @@ class OverridesCompletion(
|
|||||||
psiDocumentManager.doPostponedOperationsAndUnblockDocument(context.document)
|
psiDocumentManager.doPostponedOperationsAndUnblockDocument(context.document)
|
||||||
|
|
||||||
val offset = insertedMember.endOffset
|
val offset = insertedMember.endOffset
|
||||||
val chars = context.document.charsSequence
|
val commaOffset = chars.indexOfSkippingSpace(',', offset)!!
|
||||||
val commaOffset = chars.skipSpaces(offset)
|
val atCharOffset = chars.indexOfSkippingSpace('@', commaOffset + 1)!!
|
||||||
assert(chars[commaOffset] == '$') { "Incorrect char at index: '${chars[commaOffset]}', '$' expected" }
|
context.document.deleteString(offset, atCharOffset + 1)
|
||||||
context.document.deleteString(offset, commaOffset + 1)
|
|
||||||
|
|
||||||
context.editor.moveCaret(offset)
|
context.editor.moveCaret(offset)
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-4
@@ -1,12 +1,11 @@
|
|||||||
package ppp
|
package ppp
|
||||||
|
|
||||||
interface I {
|
interface I {
|
||||||
val p: Nested
|
val p: CCCC.Nested
|
||||||
|
|
||||||
interface Nested
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class CCCC(over<caret>val x: Int) : I {
|
class CCCC(over<caret>val x: Int) : I {
|
||||||
|
interface Nested
|
||||||
}
|
}
|
||||||
|
|
||||||
// ELEMENT_TEXT: "override val p: I.Nested"
|
// ELEMENT_TEXT: "override val p: CCCC.Nested"
|
||||||
|
|||||||
+4
-5
@@ -1,12 +1,11 @@
|
|||||||
package ppp
|
package ppp
|
||||||
|
|
||||||
interface I {
|
interface I {
|
||||||
val p: Nested
|
val p: CCCC.Nested
|
||||||
|
}
|
||||||
|
|
||||||
|
class CCCC(override val p: CCCC.Nested<caret>val x: Int) : I {
|
||||||
interface Nested
|
interface Nested
|
||||||
}
|
}
|
||||||
|
|
||||||
class CCCC(override val p: I.Nested<caret>val x: Int) : I {
|
// ELEMENT_TEXT: "override val p: CCCC.Nested"
|
||||||
}
|
|
||||||
|
|
||||||
// ELEMENT_TEXT: "override val p: I.Nested"
|
|
||||||
|
|||||||
Reference in New Issue
Block a user