From acc451bc54e9ac9bbe19eea7af65fafa9d2bc994 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Tue, 27 Oct 2015 21:14:02 +0300 Subject: [PATCH] KT-9723 Completion of override property in constructor produces bad formatting #KT-9723 Fixed --- .../idea/completion/OverridesCompletion.kt | 16 +++++++++++++--- .../override/ValInConstructorParameter2.kt | 11 +++++++++++ .../ValInConstructorParameter2.kt.after | 11 +++++++++++ .../override/ValInConstructorParameter3.kt | 7 +++++++ .../ValInConstructorParameter3.kt.after | 7 +++++++ .../override/ValInConstructorParameter4.kt | 12 ++++++++++++ .../ValInConstructorParameter4.kt.after | 12 ++++++++++++ .../BasicCompletionHandlerTestGenerated.java | 18 ++++++++++++++++++ 8 files changed, 91 insertions(+), 3 deletions(-) create mode 100644 idea/idea-completion/testData/handlers/basic/override/ValInConstructorParameter2.kt create mode 100644 idea/idea-completion/testData/handlers/basic/override/ValInConstructorParameter2.kt.after create mode 100644 idea/idea-completion/testData/handlers/basic/override/ValInConstructorParameter3.kt create mode 100644 idea/idea-completion/testData/handlers/basic/override/ValInConstructorParameter3.kt.after create mode 100644 idea/idea-completion/testData/handlers/basic/override/ValInConstructorParameter4.kt create mode 100644 idea/idea-completion/testData/handlers/basic/override/ValInConstructorParameter4.kt.after 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 a878e18b668..8a50bbf0835 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,6 +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.core.completion.DeclarationLookupObject import org.jetbrains.kotlin.idea.core.overrideImplement.OverrideMembersHandler import org.jetbrains.kotlin.idea.core.overrideImplement.generateMember @@ -99,10 +100,11 @@ class OverridesCompletion( } override fun handleInsert(context: InsertionContext) { - val dummyMemberText = if (isConstructorParameter) "override val dummy" else "override fun dummy() {}" + val dummyMemberText = if (isConstructorParameter) "override val dummy: Dummy $" else "override fun dummy() {}" context.document.replaceString(context.startOffset, context.tailOffset, dummyMemberText) - PsiDocumentManager.getInstance(context.project).commitAllDocuments() + val psiDocumentManager = PsiDocumentManager.getInstance(context.project) + psiDocumentManager.commitAllDocuments() val dummyMember = context.file.findElementAt(context.startOffset)!!.getStrictParentOfType()!! @@ -116,7 +118,15 @@ class OverridesCompletion( ShortenReferences.DEFAULT.process(insertedMember) if (isConstructorParameter) { - context.editor.moveCaret(insertedMember.endOffset) + 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) + + context.editor.moveCaret(offset) } else { moveCaretIntoGeneratedElement(context.editor, insertedMember) diff --git a/idea/idea-completion/testData/handlers/basic/override/ValInConstructorParameter2.kt b/idea/idea-completion/testData/handlers/basic/override/ValInConstructorParameter2.kt new file mode 100644 index 00000000000..16d753b6880 --- /dev/null +++ b/idea/idea-completion/testData/handlers/basic/override/ValInConstructorParameter2.kt @@ -0,0 +1,11 @@ +interface I { + val p: Int +} + +class CCCC( + over + private val v1: Int, + private val v2: Int +) : I + +// ELEMENT_TEXT: "override val p: Int" diff --git a/idea/idea-completion/testData/handlers/basic/override/ValInConstructorParameter2.kt.after b/idea/idea-completion/testData/handlers/basic/override/ValInConstructorParameter2.kt.after new file mode 100644 index 00000000000..3314486fb02 --- /dev/null +++ b/idea/idea-completion/testData/handlers/basic/override/ValInConstructorParameter2.kt.after @@ -0,0 +1,11 @@ +interface I { + val p: Int +} + +class CCCC( + override val p: Int + private val v1: Int, + private val v2: Int +) : I + +// ELEMENT_TEXT: "override val p: Int" diff --git a/idea/idea-completion/testData/handlers/basic/override/ValInConstructorParameter3.kt b/idea/idea-completion/testData/handlers/basic/override/ValInConstructorParameter3.kt new file mode 100644 index 00000000000..381c1e1aaf3 --- /dev/null +++ b/idea/idea-completion/testData/handlers/basic/override/ValInConstructorParameter3.kt @@ -0,0 +1,7 @@ +interface I { + val p: Int +} + +class CCCC(overval x: Int) : I + +// ELEMENT_TEXT: "override val p: Int" diff --git a/idea/idea-completion/testData/handlers/basic/override/ValInConstructorParameter3.kt.after b/idea/idea-completion/testData/handlers/basic/override/ValInConstructorParameter3.kt.after new file mode 100644 index 00000000000..dc46698c26e --- /dev/null +++ b/idea/idea-completion/testData/handlers/basic/override/ValInConstructorParameter3.kt.after @@ -0,0 +1,7 @@ +interface I { + val p: Int +} + +class CCCC(override val p: Intval x: Int) : I + +// ELEMENT_TEXT: "override val p: Int" diff --git a/idea/idea-completion/testData/handlers/basic/override/ValInConstructorParameter4.kt b/idea/idea-completion/testData/handlers/basic/override/ValInConstructorParameter4.kt new file mode 100644 index 00000000000..45ffee6c486 --- /dev/null +++ b/idea/idea-completion/testData/handlers/basic/override/ValInConstructorParameter4.kt @@ -0,0 +1,12 @@ +package ppp + +interface I { + val p: Nested + + interface Nested +} + +class CCCC(overval x: Int) : I { +} + +// ELEMENT_TEXT: "override val p: I.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 new file mode 100644 index 00000000000..c1312490a3d --- /dev/null +++ b/idea/idea-completion/testData/handlers/basic/override/ValInConstructorParameter4.kt.after @@ -0,0 +1,12 @@ +package ppp + +interface I { + val p: Nested + + interface Nested +} + +class CCCC(override val p: I.Nestedval x: Int) : I { +} + +// ELEMENT_TEXT: "override val p: I.Nested" diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/handlers/BasicCompletionHandlerTestGenerated.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/handlers/BasicCompletionHandlerTestGenerated.java index 4a7ffce6896..cae9bc3247b 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/handlers/BasicCompletionHandlerTestGenerated.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/handlers/BasicCompletionHandlerTestGenerated.java @@ -429,6 +429,24 @@ public class BasicCompletionHandlerTestGenerated extends AbstractBasicCompletion String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/handlers/basic/override/ValInConstructorParameter.kt"); doTest(fileName); } + + @TestMetadata("ValInConstructorParameter2.kt") + public void testValInConstructorParameter2() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/handlers/basic/override/ValInConstructorParameter2.kt"); + doTest(fileName); + } + + @TestMetadata("ValInConstructorParameter3.kt") + public void testValInConstructorParameter3() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/handlers/basic/override/ValInConstructorParameter3.kt"); + doTest(fileName); + } + + @TestMetadata("ValInConstructorParameter4.kt") + public void testValInConstructorParameter4() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/handlers/basic/override/ValInConstructorParameter4.kt"); + doTest(fileName); + } } @TestMetadata("idea/idea-completion/testData/handlers/basic/parameterNameAndType")