Change Function Signature Fix: Do not render default values in overriding functions

#KT-8520 Fixed
This commit is contained in:
Alexey Sedunov
2015-09-08 17:23:01 +03:00
parent 794127a38b
commit d5deb03292
4 changed files with 38 additions and 5 deletions
@@ -66,7 +66,17 @@ import java.util.*;
* Fix that changes member function's signature to match one of super functions' signatures.
*/
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>() {
@Override
public Unit invoke(DescriptorRendererOptions options) {
@@ -75,6 +85,7 @@ public class ChangeMemberFunctionSignatureFix extends JetHintAction<JetNamedFunc
options.setModifiers(Collections.<DescriptorRendererModifier>emptySet());
options.setNameShortness(NameShortness.SHORT);
options.setUnitReturnType(false);
options.setRenderDefaultValues(false);
return Unit.INSTANCE$;
}
}
@@ -96,7 +107,7 @@ public class ChangeMemberFunctionSignatureFix extends JetHintAction<JetNamedFunc
@Override
public String getText() {
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 {
return JetBundle.message("change.function.signature.action.multiple");
@@ -134,7 +145,7 @@ public class ChangeMemberFunctionSignatureFix extends JetHintAction<JetNamedFunc
for (FunctionDescriptor superFunction : superFunctions) {
if (!superFunction.getKind().isReal()) continue;
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());
Collections.sort(keys);
@@ -364,13 +375,13 @@ public class ChangeMemberFunctionSignatureFix extends JetHintAction<JetNamedFunc
@NotNull
@Override
public String getTextFor(FunctionDescriptor aValue) {
return SIGNATURE_RENDERER.render(aValue);
return SIGNATURE_PREVIEW_RENDERER.render(aValue);
}
};
}
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();
@@ -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
}
@@ -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);
}
@TestMetadata("noDefaultValuesInOverride.kt")
public void testNoDefaultValuesInOverride() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/override/nothingToOverride/noDefaultValuesInOverride.kt");
doTest(fileName);
}
@TestMetadata("noOpenSuperFunction.kt")
public void testNoOpenSuperFunction() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/override/nothingToOverride/noOpenSuperFunction.kt");