diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/refactoring/inline/InlineTestGenerated.java b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/refactoring/inline/InlineTestGenerated.java index b7bdef07754c..130d51e46c15 100644 --- a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/refactoring/inline/InlineTestGenerated.java +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/refactoring/inline/InlineTestGenerated.java @@ -2115,6 +2115,11 @@ public abstract class InlineTestGenerated extends AbstractInlineTest { runTest("testData/refactoring/inline/namedFunction/defaultParameterDiffers1.kt"); } + @TestMetadata("defaultParameterFromSuper.kt") + public void testDefaultParameterFromSuper() throws Exception { + runTest("testData/refactoring/inline/namedFunction/defaultParameterFromSuper.kt"); + } + @TestMetadata("defaultParameterImplicitlyUsed.kt") public void testDefaultParameterImplicitlyUsed() throws Exception { runTest("testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed.kt"); diff --git a/plugins/kotlin/idea/tests/testData/quickfix/deprecatedSymbolUsage/optionalParameters/overridingMethod.kt b/plugins/kotlin/idea/tests/testData/quickfix/deprecatedSymbolUsage/optionalParameters/overridingMethod.kt index f3ebcb875bb4..42b3d57a81d4 100644 --- a/plugins/kotlin/idea/tests/testData/quickfix/deprecatedSymbolUsage/optionalParameters/overridingMethod.kt +++ b/plugins/kotlin/idea/tests/testData/quickfix/deprecatedSymbolUsage/optionalParameters/overridingMethod.kt @@ -17,4 +17,4 @@ fun foo(c: C) { } // FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.replaceWith.DeprecatedSymbolUsageFix -/* IGNORE_K2 */ \ No newline at end of file +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.k2.codeinsight.fixes.replaceWith.DeprecatedSymbolUsageFix \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/quickfix/deprecatedSymbolUsage/optionalParameters/overridingMethod.kt.after b/plugins/kotlin/idea/tests/testData/quickfix/deprecatedSymbolUsage/optionalParameters/overridingMethod.kt.after index 668672111ba4..4002bc7ac612 100644 --- a/plugins/kotlin/idea/tests/testData/quickfix/deprecatedSymbolUsage/optionalParameters/overridingMethod.kt.after +++ b/plugins/kotlin/idea/tests/testData/quickfix/deprecatedSymbolUsage/optionalParameters/overridingMethod.kt.after @@ -17,4 +17,4 @@ fun foo(c: C) { } // FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.replaceWith.DeprecatedSymbolUsageFix -/* IGNORE_K2 */ \ No newline at end of file +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.k2.codeinsight.fixes.replaceWith.DeprecatedSymbolUsageFix \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterFromSuper.kt b/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterFromSuper.kt new file mode 100644 index 000000000000..25b4e67b9b80 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterFromSuper.kt @@ -0,0 +1,13 @@ +interface I { + fun oldFun(p1: String, p2: Int = 0, p3: Int = 1) = newFun(p1, p2, p3) + + 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("", 0) +} \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterFromSuper.kt.after b/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterFromSuper.kt.after new file mode 100644 index 000000000000..6ace54e70e02 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterFromSuper.kt.after @@ -0,0 +1,12 @@ +interface I { + + 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/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/inline/codeInliner/InlinePostProcessor.kt b/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/inline/codeInliner/InlinePostProcessor.kt index 490d7f9dc7ad..913f77ceb4b6 100644 --- a/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/inline/codeInliner/InlinePostProcessor.kt +++ b/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/inline/codeInliner/InlinePostProcessor.kt @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.analysis.api.resolution.singleFunctionCallOrNull import org.jetbrains.kotlin.analysis.api.resolution.successfulFunctionCallOrNull import org.jetbrains.kotlin.analysis.api.resolution.symbol import org.jetbrains.kotlin.analysis.api.symbols.KaValueParameterSymbol +import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionLikeSymbol import org.jetbrains.kotlin.idea.base.analysis.api.utils.defaultValue import org.jetbrains.kotlin.idea.base.codeInsight.ShortenReferencesFacility import org.jetbrains.kotlin.idea.codeinsight.utils.RemoveExplicitTypeArgumentsUtils @@ -144,9 +145,17 @@ object InlinePostProcessor: AbstractInlinePostProcessor() { val functionCall = callExpression.resolveCallOld()?.singleFunctionCallOrNull() ?: return@forEachDescendantOfType val arguments = functionCall.argumentMapping.entries.toList() - val valueParameters = functionCall.partiallyAppliedSymbol.symbol.valueParameters + val callableSymbol = functionCall.partiallyAppliedSymbol.symbol + val valueParameters = callableSymbol.valueParameters + var idx = arguments.size for ((argument, param) in arguments.asReversed()) { + idx-- val defaultValue = param.symbol.defaultValue + ?: callableSymbol.getAllOverriddenSymbols() + .mapNotNull { + val params = (it as? KtFunctionLikeSymbol)?.valueParameters + params?.getOrNull(idx)?.defaultValue + }.firstOrNull() fun substituteDefaultValueWithPassedArguments(): @NlsSafe String? { val key = Key("SUBSTITUTION") diff --git a/plugins/kotlin/refactorings/kotlin.refactorings.tests.k2/test/org/jetbrains/kotlin/idea/k2/refactoring/inline/KotlinFirInlineTestGenerated.java b/plugins/kotlin/refactorings/kotlin.refactorings.tests.k2/test/org/jetbrains/kotlin/idea/k2/refactoring/inline/KotlinFirInlineTestGenerated.java index 50818b2c0b0b..7f7c47200f7f 100644 --- a/plugins/kotlin/refactorings/kotlin.refactorings.tests.k2/test/org/jetbrains/kotlin/idea/k2/refactoring/inline/KotlinFirInlineTestGenerated.java +++ b/plugins/kotlin/refactorings/kotlin.refactorings.tests.k2/test/org/jetbrains/kotlin/idea/k2/refactoring/inline/KotlinFirInlineTestGenerated.java @@ -824,6 +824,11 @@ public abstract class KotlinFirInlineTestGenerated extends AbstractKotlinFirInli runTest("../../idea/tests/testData/refactoring/inline/namedFunction/defaultParameterDiffers1.kt"); } + @TestMetadata("defaultParameterFromSuper.kt") + public void testDefaultParameterFromSuper() throws Exception { + runTest("../../idea/tests/testData/refactoring/inline/namedFunction/defaultParameterFromSuper.kt"); + } + @TestMetadata("defaultParameterImplicitlyUsed.kt") public void testDefaultParameterImplicitlyUsed() throws Exception { runTest("../../idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed.kt");