diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/OptionalParametersHelper.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/OptionalParametersHelper.kt index e24cda897f2..cd899ac2d40 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/OptionalParametersHelper.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/OptionalParametersHelper.kt @@ -120,6 +120,11 @@ public object OptionalParametersHelper { public fun defaultParameterValue(parameter: ValueParameterDescriptor, project: Project): DefaultValue? { if (!parameter.hasDefaultValue()) return null + if (!parameter.declaresDefaultValue()) { + val overridden = parameter.getOverriddenDescriptors().firstOrNull { it.hasDefaultValue() } ?: return null + return defaultParameterValue(overridden, project) + } + //TODO: parameter in overriding method! //TODO: it's a temporary code while we don't have default values accessible from descriptors var declaration = DescriptorToSourceUtilsIde.getAnyDeclaration(project, parameter) as? JetParameter ?: return null diff --git a/idea/testData/quickfix/deprecatedSymbolUsage/optionalParameters/overridingMethod.kt b/idea/testData/quickfix/deprecatedSymbolUsage/optionalParameters/overridingMethod.kt new file mode 100644 index 00000000000..7a6957c969b --- /dev/null +++ b/idea/testData/quickfix/deprecatedSymbolUsage/optionalParameters/overridingMethod.kt @@ -0,0 +1,17 @@ +// "Replace with 'newFun(p1, p2, p3)'" "true" + +interface I { + @deprecated("", ReplaceWith("newFun(p1, p2, p3)")) + fun oldFun(p1: String, p2: Int = 0, p3: Int = 1) + + fun newFun(p1: String, p2: Int = 1, p3: Int = 1) +} + +abstract class C : I { + override fun newFun(p1: String, p2: Int, p3: Int) { } + +} + +fun foo(c: C) { + c.oldFun("") +} diff --git a/idea/testData/quickfix/deprecatedSymbolUsage/optionalParameters/overridingMethod.kt.after b/idea/testData/quickfix/deprecatedSymbolUsage/optionalParameters/overridingMethod.kt.after new file mode 100644 index 00000000000..2b00bfae4ca --- /dev/null +++ b/idea/testData/quickfix/deprecatedSymbolUsage/optionalParameters/overridingMethod.kt.after @@ -0,0 +1,17 @@ +// "Replace with 'newFun(p1, p2, p3)'" "true" + +interface I { + @deprecated("", ReplaceWith("newFun(p1, p2, p3)")) + fun oldFun(p1: String, p2: Int = 0, p3: Int = 1) + + fun newFun(p1: String, p2: Int = 1, p3: Int = 1) +} + +abstract class C : I { + override fun newFun(p1: String, p2: Int, p3: Int) { } + +} + +fun foo(c: C) { + c.newFun("", 0) +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index f48e3b36334..0c74a58c579 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -3284,6 +3284,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/deprecatedSymbolUsage/optionalParameters/optionalParameters9.kt"); doTest(fileName); } + + @TestMetadata("overridingMethod.kt") + public void testOverridingMethod() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/deprecatedSymbolUsage/optionalParameters/overridingMethod.kt"); + doTest(fileName); + } } @TestMetadata("idea/testData/quickfix/deprecatedSymbolUsage/safeCall")