Change Function Signature Fix: Do not render default values in overriding functions
#KT-8520 Fixed
This commit is contained in:
@@ -66,7 +66,17 @@ import java.util.*;
|
|||||||
* Fix that changes member function's signature to match one of super functions' signatures.
|
* Fix that changes member function's signature to match one of super functions' signatures.
|
||||||
*/
|
*/
|
||||||
public class ChangeMemberFunctionSignatureFix extends JetHintAction<JetNamedFunction> {
|
public class ChangeMemberFunctionSignatureFix extends JetHintAction<JetNamedFunction> {
|
||||||
private static final DescriptorRenderer SIGNATURE_RENDERER = DescriptorRenderer.Companion.withOptions(
|
private static final DescriptorRenderer SIGNATURE_SOURCE_RENDERER = IdeDescriptorRenderers.SOURCE_CODE.withOptions(
|
||||||
|
new Function1<DescriptorRendererOptions, Unit>() {
|
||||||
|
@Override
|
||||||
|
public Unit invoke(DescriptorRendererOptions options) {
|
||||||
|
options.setRenderDefaultValues(false);
|
||||||
|
return Unit.INSTANCE$;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
private static final DescriptorRenderer SIGNATURE_PREVIEW_RENDERER = DescriptorRenderer.Companion.withOptions(
|
||||||
new Function1<DescriptorRendererOptions, Unit>() {
|
new Function1<DescriptorRendererOptions, Unit>() {
|
||||||
@Override
|
@Override
|
||||||
public Unit invoke(DescriptorRendererOptions options) {
|
public Unit invoke(DescriptorRendererOptions options) {
|
||||||
@@ -75,6 +85,7 @@ public class ChangeMemberFunctionSignatureFix extends JetHintAction<JetNamedFunc
|
|||||||
options.setModifiers(Collections.<DescriptorRendererModifier>emptySet());
|
options.setModifiers(Collections.<DescriptorRendererModifier>emptySet());
|
||||||
options.setNameShortness(NameShortness.SHORT);
|
options.setNameShortness(NameShortness.SHORT);
|
||||||
options.setUnitReturnType(false);
|
options.setUnitReturnType(false);
|
||||||
|
options.setRenderDefaultValues(false);
|
||||||
return Unit.INSTANCE$;
|
return Unit.INSTANCE$;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -96,7 +107,7 @@ public class ChangeMemberFunctionSignatureFix extends JetHintAction<JetNamedFunc
|
|||||||
@Override
|
@Override
|
||||||
public String getText() {
|
public String getText() {
|
||||||
if (possibleSignatures.size() == 1) {
|
if (possibleSignatures.size() == 1) {
|
||||||
return JetBundle.message("change.function.signature.action.single", SIGNATURE_RENDERER.render(possibleSignatures.get(0)));
|
return JetBundle.message("change.function.signature.action.single", SIGNATURE_PREVIEW_RENDERER.render(possibleSignatures.get(0)));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return JetBundle.message("change.function.signature.action.multiple");
|
return JetBundle.message("change.function.signature.action.multiple");
|
||||||
@@ -134,7 +145,7 @@ public class ChangeMemberFunctionSignatureFix extends JetHintAction<JetNamedFunc
|
|||||||
for (FunctionDescriptor superFunction : superFunctions) {
|
for (FunctionDescriptor superFunction : superFunctions) {
|
||||||
if (!superFunction.getKind().isReal()) continue;
|
if (!superFunction.getKind().isReal()) continue;
|
||||||
FunctionDescriptor signature = changeSignatureToMatch(functionDescriptor, superFunction);
|
FunctionDescriptor signature = changeSignatureToMatch(functionDescriptor, superFunction);
|
||||||
possibleSignatures.put(SIGNATURE_RENDERER.render(signature), signature);
|
possibleSignatures.put(SIGNATURE_PREVIEW_RENDERER.render(signature), signature);
|
||||||
}
|
}
|
||||||
List<String> keys = new ArrayList<String>(possibleSignatures.keySet());
|
List<String> keys = new ArrayList<String>(possibleSignatures.keySet());
|
||||||
Collections.sort(keys);
|
Collections.sort(keys);
|
||||||
@@ -364,13 +375,13 @@ public class ChangeMemberFunctionSignatureFix extends JetHintAction<JetNamedFunc
|
|||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public String getTextFor(FunctionDescriptor aValue) {
|
public String getTextFor(FunctionDescriptor aValue) {
|
||||||
return SIGNATURE_RENDERER.render(aValue);
|
return SIGNATURE_PREVIEW_RENDERER.render(aValue);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private void changeSignature(FunctionDescriptor patternDescriptor) {
|
private void changeSignature(FunctionDescriptor patternDescriptor) {
|
||||||
final String signatureString = IdeDescriptorRenderers.SOURCE_CODE.render(patternDescriptor);
|
final String signatureString = SIGNATURE_SOURCE_RENDERER.render(patternDescriptor);
|
||||||
|
|
||||||
PsiDocumentManager.getInstance(project).commitAllDocuments();
|
PsiDocumentManager.getInstance(project).commitAllDocuments();
|
||||||
|
|
||||||
|
|||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
// "Change function signature to 'fun foo(a: Int, b: String): Any?'" "true"
|
||||||
|
interface A {
|
||||||
|
public fun foo(a: Int = 1, b: String = "str"): Any?
|
||||||
|
}
|
||||||
|
|
||||||
|
class B : A {
|
||||||
|
public override<caret> fun foo(a: Int): Any? = null
|
||||||
|
}
|
||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
// "Change function signature to 'fun foo(a: Int, b: String): Any?'" "true"
|
||||||
|
interface A {
|
||||||
|
public fun foo(a: Int = 1, b: String = "str"): Any?
|
||||||
|
}
|
||||||
|
|
||||||
|
class B : A {
|
||||||
|
public override<caret> fun foo(a: Int, b: String): Any? = null
|
||||||
|
}
|
||||||
@@ -4889,6 +4889,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("noDefaultValuesInOverride.kt")
|
||||||
|
public void testNoDefaultValuesInOverride() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/override/nothingToOverride/noDefaultValuesInOverride.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("noOpenSuperFunction.kt")
|
@TestMetadata("noOpenSuperFunction.kt")
|
||||||
public void testNoOpenSuperFunction() throws Exception {
|
public void testNoOpenSuperFunction() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/override/nothingToOverride/noOpenSuperFunction.kt");
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/override/nothingToOverride/noOpenSuperFunction.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user