From 5f87e849661eab0c4f4e9d80d3d7c08c61ce3428 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Fri, 8 Jun 2018 15:02:33 +0300 Subject: [PATCH] Override/Implement: Do not insert super-call into extension body Such super-calls are not are supported yet #KT-4311 Fixed --- .../overrideImplement/OverrideMemberChooserObject.kt | 9 +++++++-- .../overrideImplement/overrideExtensionFunction.kt | 9 +++++++++ .../overrideExtensionFunction.kt.after | 11 +++++++++++ .../kotlin/idea/codeInsight/OverrideImplementTest.kt | 4 ++++ 4 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 idea/testData/codeInsight/overrideImplement/overrideExtensionFunction.kt create mode 100644 idea/testData/codeInsight/overrideImplement/overrideExtensionFunction.kt.after 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 de1ae802103..f7d32833967 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 @@ -102,9 +102,14 @@ interface OverrideMemberChooserObject : ClassMember { fun OverrideMemberChooserObject.generateMember(targetClass: KtClassOrObject, copyDoc: Boolean): KtCallableDeclaration { val project = targetClass.project - val bodyType = if (targetClass.hasExpectModifier()) OverrideMemberChooserObject.BodyType.NO_BODY else bodyType - val descriptor = immediateSuper + + val bodyType = when { + targetClass.hasExpectModifier() -> OverrideMemberChooserObject.BodyType.NO_BODY + descriptor.extensionReceiverParameter != null -> OverrideMemberChooserObject.BodyType.EMPTY + else -> bodyType + } + if (preferConstructorParameter && descriptor is PropertyDescriptor) return generateConstructorParameter(project, descriptor) val newMember: KtCallableDeclaration = when (descriptor) { diff --git a/idea/testData/codeInsight/overrideImplement/overrideExtensionFunction.kt b/idea/testData/codeInsight/overrideImplement/overrideExtensionFunction.kt new file mode 100644 index 00000000000..c580a987244 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/overrideExtensionFunction.kt @@ -0,0 +1,9 @@ +open class A { + open fun Int.foo(): Int { + return 0 + } +} + +class B: A() { + +} \ No newline at end of file diff --git a/idea/testData/codeInsight/overrideImplement/overrideExtensionFunction.kt.after b/idea/testData/codeInsight/overrideImplement/overrideExtensionFunction.kt.after new file mode 100644 index 00000000000..6b3e4cb4fae --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/overrideExtensionFunction.kt.after @@ -0,0 +1,11 @@ +open class A { + open fun Int.foo(): Int { + return 0 + } +} + +class B: A() { + override fun Int.foo(): Int { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementTest.kt b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementTest.kt index a78f7ed37ef..50d82755721 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementTest.kt @@ -121,6 +121,10 @@ class OverrideImplementTest : AbstractOverrideImplementTest() { doOverrideFileTest() } + fun testOverrideExtensionFunction() { + doOverrideFileTest() + } + fun testOverrideExtensionProperty() { doOverrideFileTest() }