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. * 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();
@@ -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); 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");