KT-9723 Completion of override property in constructor produces bad formatting
#KT-9723 Fixed
This commit is contained in:
+13
-3
@@ -30,6 +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.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
|
||||||
@@ -99,10 +100,11 @@ class OverridesCompletion(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun handleInsert(context: InsertionContext) {
|
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)
|
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<KtNamedDeclaration>()!!
|
val dummyMember = context.file.findElementAt(context.startOffset)!!.getStrictParentOfType<KtNamedDeclaration>()!!
|
||||||
|
|
||||||
@@ -116,7 +118,15 @@ class OverridesCompletion(
|
|||||||
ShortenReferences.DEFAULT.process(insertedMember)
|
ShortenReferences.DEFAULT.process(insertedMember)
|
||||||
|
|
||||||
if (isConstructorParameter) {
|
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 {
|
else {
|
||||||
moveCaretIntoGeneratedElement(context.editor, insertedMember)
|
moveCaretIntoGeneratedElement(context.editor, insertedMember)
|
||||||
|
|||||||
+11
@@ -0,0 +1,11 @@
|
|||||||
|
interface I {
|
||||||
|
val p: Int
|
||||||
|
}
|
||||||
|
|
||||||
|
class CCCC(
|
||||||
|
over<caret>
|
||||||
|
private val v1: Int,
|
||||||
|
private val v2: Int
|
||||||
|
) : I
|
||||||
|
|
||||||
|
// ELEMENT_TEXT: "override val p: Int"
|
||||||
+11
@@ -0,0 +1,11 @@
|
|||||||
|
interface I {
|
||||||
|
val p: Int
|
||||||
|
}
|
||||||
|
|
||||||
|
class CCCC(
|
||||||
|
override val p: Int<caret>
|
||||||
|
private val v1: Int,
|
||||||
|
private val v2: Int
|
||||||
|
) : I
|
||||||
|
|
||||||
|
// ELEMENT_TEXT: "override val p: Int"
|
||||||
+7
@@ -0,0 +1,7 @@
|
|||||||
|
interface I {
|
||||||
|
val p: Int
|
||||||
|
}
|
||||||
|
|
||||||
|
class CCCC(over<caret>val x: Int) : I
|
||||||
|
|
||||||
|
// ELEMENT_TEXT: "override val p: Int"
|
||||||
+7
@@ -0,0 +1,7 @@
|
|||||||
|
interface I {
|
||||||
|
val p: Int
|
||||||
|
}
|
||||||
|
|
||||||
|
class CCCC(override val p: Int<caret>val x: Int) : I
|
||||||
|
|
||||||
|
// ELEMENT_TEXT: "override val p: Int"
|
||||||
+12
@@ -0,0 +1,12 @@
|
|||||||
|
package ppp
|
||||||
|
|
||||||
|
interface I {
|
||||||
|
val p: Nested
|
||||||
|
|
||||||
|
interface Nested
|
||||||
|
}
|
||||||
|
|
||||||
|
class CCCC(over<caret>val x: Int) : I {
|
||||||
|
}
|
||||||
|
|
||||||
|
// ELEMENT_TEXT: "override val p: I.Nested"
|
||||||
+12
@@ -0,0 +1,12 @@
|
|||||||
|
package ppp
|
||||||
|
|
||||||
|
interface I {
|
||||||
|
val p: Nested
|
||||||
|
|
||||||
|
interface Nested
|
||||||
|
}
|
||||||
|
|
||||||
|
class CCCC(override val p: I.Nested<caret>val x: Int) : I {
|
||||||
|
}
|
||||||
|
|
||||||
|
// ELEMENT_TEXT: "override val p: I.Nested"
|
||||||
+18
@@ -429,6 +429,24 @@ public class BasicCompletionHandlerTestGenerated extends AbstractBasicCompletion
|
|||||||
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/handlers/basic/override/ValInConstructorParameter.kt");
|
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/handlers/basic/override/ValInConstructorParameter.kt");
|
||||||
doTest(fileName);
|
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")
|
@TestMetadata("idea/idea-completion/testData/handlers/basic/parameterNameAndType")
|
||||||
|
|||||||
Reference in New Issue
Block a user