override/implement: correctly generate call to super method with vararg arguments

#KT-7580 FIxed
This commit is contained in:
Dmitry Jemerov
2015-04-24 14:59:46 +02:00
parent f5019371bd
commit 0cf77dfb10
4 changed files with 29 additions and 11 deletions
@@ -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())
}
}
@@ -0,0 +1,7 @@
open class S {
open fun s(vararg v: Int) {}
}
class D : S() {
<caret>
}
@@ -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)
}
}
@@ -205,4 +205,8 @@ public final class OverrideImplementTest extends AbstractOverrideImplementTest {
public void testEscapeIdentifiers() {
doOverrideFileTest();
}
public void testVarArgs() {
doOverrideFileTest();
}
}