override/implement: correctly generate call to super method with vararg arguments
#KT-7580 FIxed
This commit is contained in:
+9
-11
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user