From baa0f2dc1bb1b8548f71bcd1f3ccf6f85cfe43fe Mon Sep 17 00:00:00 2001 From: Alexander Podkhalyuzin Date: Fri, 7 Sep 2018 23:15:43 +0300 Subject: [PATCH] Override completion in expect class should behave differently Caret placement is at the end of new fun/property #KT-25313 Fixed --- .../basic/override/ExpectClassValOverride.kt | 8 ++++++++ .../override/ExpectClassValOverride.kt.after | 8 ++++++++ .../BasicCompletionHandlerTestGenerated.java | 5 +++++ .../kotlin/idea/core/generateUtil.kt | 3 ++- .../OverrideMemberChooserObject.kt | 19 +++++++++++-------- .../enumClass.kt.after | 6 +++--- .../implementAll.kt.after | 4 ++-- .../implemenAsConstructorParameter.kt.after | 2 +- 8 files changed, 40 insertions(+), 15 deletions(-) create mode 100644 idea/idea-completion/testData/handlers/basic/override/ExpectClassValOverride.kt create mode 100644 idea/idea-completion/testData/handlers/basic/override/ExpectClassValOverride.kt.after diff --git a/idea/idea-completion/testData/handlers/basic/override/ExpectClassValOverride.kt b/idea/idea-completion/testData/handlers/basic/override/ExpectClassValOverride.kt new file mode 100644 index 00000000000..bc93611e5a3 --- /dev/null +++ b/idea/idea-completion/testData/handlers/basic/override/ExpectClassValOverride.kt @@ -0,0 +1,8 @@ +interface Interface { + var field: Int +} + +expect class SClass : Interface { + override +} +// ELEMENT_TEXT: "override var field: Int" \ No newline at end of file diff --git a/idea/idea-completion/testData/handlers/basic/override/ExpectClassValOverride.kt.after b/idea/idea-completion/testData/handlers/basic/override/ExpectClassValOverride.kt.after new file mode 100644 index 00000000000..78f4ac83282 --- /dev/null +++ b/idea/idea-completion/testData/handlers/basic/override/ExpectClassValOverride.kt.after @@ -0,0 +1,8 @@ +interface Interface { + var field: Int +} + +expect class SClass : Interface { + override var field: Int +} +// ELEMENT_TEXT: "override var field: Int" \ No newline at end of file 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 46ba9744f86..73992bc8ef9 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 @@ -491,6 +491,11 @@ public class BasicCompletionHandlerTestGenerated extends AbstractBasicCompletion KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/idea-completion/testData/handlers/basic/override"), Pattern.compile("^([^.]+)\\.kt$"), TargetBackend.ANY, true); } + @TestMetadata("ExpectClassValOverride.kt") + public void testExpectClassValOverride() throws Exception { + runTest("idea/idea-completion/testData/handlers/basic/override/ExpectClassValOverride.kt"); + } + @TestMetadata("ImplementFunction.kt") public void testImplementFunction() throws Exception { runTest("idea/idea-completion/testData/handlers/basic/override/ImplementFunction.kt"); diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/generateUtil.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/generateUtil.kt index 1867b888043..eb2e654263a 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/generateUtil.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/generateUtil.kt @@ -96,6 +96,7 @@ private fun moveCaretIntoGeneratedElementDocumentUnblocked(editor: Editor, eleme } } + editor.moveCaret(element.endOffset) return false } @@ -213,4 +214,4 @@ fun insertMembersAfter( fun insertMember(editor: Editor?, classOrObject: KtClassOrObject, declaration: T, anchor: PsiElement? = null): T { return insertMembersAfter(editor, classOrObject, listOf(declaration), anchor).single() -} \ No newline at end of file +} diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/OverrideMemberChooserObject.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/OverrideMemberChooserObject.kt index d05dd26d800..156b372a402 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/OverrideMemberChooserObject.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/OverrideMemberChooserObject.kt @@ -192,14 +192,17 @@ private fun FunctionDescriptor.wrap(): FunctionDescriptor { private fun generateProperty(project: Project, descriptor: PropertyDescriptor, bodyType: OverrideMemberChooserObject.BodyType): KtProperty { val newDescriptor = descriptor.wrap() - val body = buildString { - append("\nget()") - append(" = ") - append(generateUnsupportedOrSuperCall(project, descriptor, bodyType)) - if (descriptor.isVar) { - append("\nset(value) {}") - } - } + val body = + if (bodyType != OverrideMemberChooserObject.BodyType.NO_BODY) { + buildString { + append("\nget()") + append(" = ") + append(generateUnsupportedOrSuperCall(project, descriptor, bodyType)) + if (descriptor.isVar) { + append("\nset(value) {}") + } + } + } else "" return KtPsiFactory(project).createProperty(OVERRIDE_RENDERER.render(newDescriptor) + body) } diff --git a/idea/testData/intentions/implementAsConstructorParameter/enumClass.kt.after b/idea/testData/intentions/implementAsConstructorParameter/enumClass.kt.after index 6c37032513c..162f9e4d916 100644 --- a/idea/testData/intentions/implementAsConstructorParameter/enumClass.kt.after +++ b/idea/testData/intentions/implementAsConstructorParameter/enumClass.kt.after @@ -1,9 +1,9 @@ // WITH_RUNTIME // DISABLE-ERRORS interface T { - val foo: X + val foo: X } -enum class E(override val foo: Int) : T { +enum class E(override val foo: Int) : T { A, B, C -} \ No newline at end of file +} diff --git a/idea/testData/intentions/implementAsConstructorParameter/implementAll.kt.after b/idea/testData/intentions/implementAsConstructorParameter/implementAll.kt.after index c7b69511666..3939b17388d 100644 --- a/idea/testData/intentions/implementAsConstructorParameter/implementAll.kt.after +++ b/idea/testData/intentions/implementAsConstructorParameter/implementAll.kt.after @@ -1,14 +1,14 @@ // WITH_RUNTIME // DISABLE-ERRORS interface T { - val foo: X + val foo: X } class U(override val foo: String) : T { } -class V(override val foo: Int) : T { +class V(override val foo: Int) : T { } diff --git a/idea/testData/quickfix/override/implemenAsConstructorParameter.kt.after b/idea/testData/quickfix/override/implemenAsConstructorParameter.kt.after index 02b1614b54e..ee3defce909 100644 --- a/idea/testData/quickfix/override/implemenAsConstructorParameter.kt.after +++ b/idea/testData/quickfix/override/implemenAsConstructorParameter.kt.after @@ -3,4 +3,4 @@ interface I { val foo: Int } -class A(override val foo: Int) : I +class A(override val foo: Int) : I