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() val builder = StringBuilder()
builder.append("super") builder.append("super")
if (classOrObject.getDelegationSpecifiers().size() > 1) { 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) { if (descriptor is FunctionDescriptor) {
builder.append("(") val paramTexts = descriptor.getValueParameters().map {
var first = true val renderedName = it.escapedName()
for (parameterDescriptor in descriptor.getValueParameters()) { if (it.getVarargElementType() != null) "*$renderedName" else renderedName
if (!first) {
builder.append(", ")
}
first = false
builder.append(DescriptorRenderer.COMPACT.renderName(parameterDescriptor.getName()))
} }
builder.append(")") paramTexts.joinTo(builder, prefix="(", postfix=")")
} }
return builder.toString() 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() { public void testEscapeIdentifiers() {
doOverrideFileTest(); doOverrideFileTest();
} }
public void testVarArgs() {
doOverrideFileTest();
}
} }