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()
|
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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user