diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/codeInsight/OverrideImplementMethodsHandler.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/codeInsight/OverrideImplementMethodsHandler.kt index 828d002a0d9..25fb3ac0e8e 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/codeInsight/OverrideImplementMethodsHandler.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/codeInsight/OverrideImplementMethodsHandler.kt @@ -289,25 +289,23 @@ public abstract class OverrideImplementMethodsHandler : LanguageCodeInsightActio val builder = StringBuilder() builder.append("super") if (classOrObject.getDelegationSpecifiers().size() > 1) { - builder.append("<").append(DescriptorRenderer.COMPACT.renderName(descriptor.getContainingDeclaration().getName())).append(">") + builder.append("<").append(descriptor.getContainingDeclaration().escapedName()).append(">") } - builder.append(".").append(DescriptorRenderer.COMPACT.renderName(descriptor.getName())) + builder.append(".").append(descriptor.escapedName()) if (descriptor is FunctionDescriptor) { - builder.append("(") - var first = true - for (parameterDescriptor in descriptor.getValueParameters()) { - if (!first) { - builder.append(", ") - } - first = false - builder.append(DescriptorRenderer.COMPACT.renderName(parameterDescriptor.getName())) + val paramTexts = descriptor.getValueParameters().map { + val renderedName = it.escapedName() + if (it.getVarargElementType() != null) "*$renderedName" else renderedName } - builder.append(")") + paramTexts.joinTo(builder, prefix="(", postfix=")") } return builder.toString() } } + + fun DeclarationDescriptor.escapedName() = + DescriptorRenderer.COMPACT.renderName(getName()) } } diff --git a/idea/testData/codeInsight/overrideImplement/varArgs.kt b/idea/testData/codeInsight/overrideImplement/varArgs.kt new file mode 100644 index 00000000000..10309a7a438 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/varArgs.kt @@ -0,0 +1,7 @@ +open class S { + open fun s(vararg v: Int) {} +} + +class D : S() { + +} diff --git a/idea/testData/codeInsight/overrideImplement/varArgs.kt.after b/idea/testData/codeInsight/overrideImplement/varArgs.kt.after new file mode 100644 index 00000000000..fd52d2bf38f --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/varArgs.kt.after @@ -0,0 +1,9 @@ +open class S { + open fun s(vararg v: Int) {} +} + +class D : S() { + override fun s(vararg v: Int) { + super.s(*v) + } +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementTest.java b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementTest.java index c8041199894..ff0264a7781 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementTest.java +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementTest.java @@ -205,4 +205,8 @@ public final class OverrideImplementTest extends AbstractOverrideImplementTest { public void testEscapeIdentifiers() { doOverrideFileTest(); } + + public void testVarArgs() { + doOverrideFileTest(); + } }