From 59a791ea60de8c6e9c7b147a296221d71f11a9f9 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 11 Jun 2024 19:38:45 +0200 Subject: [PATCH] [kotlin] k2 inline function: skip arguments which are the same as default values ^KTIJ-30263 fixed GitOrigin-RevId: 2bb6e8c726d83d31e95a9b479c83f9a523d6e3bd --- .../inline/InlineTestGenerated.java | 35 ++++++++ .../namedFunction/defaultParameterDiffers.kt | 9 ++ .../defaultParameterDiffers.kt.after | 5 ++ .../namedFunction/defaultParameterDiffers1.kt | 9 ++ .../defaultParameterDiffers1.kt.after | 5 ++ .../defaultParameterImplicitlyUsed.kt | 9 ++ .../defaultParameterImplicitlyUsed.kt.after | 5 ++ .../defaultParameterImplicitlyUsed1.kt | 9 ++ .../defaultParameterImplicitlyUsed1.kt.after | 5 ++ .../defaultParameterImplicitlyUsed2.kt | 9 ++ .../defaultParameterImplicitlyUsed2.kt.after | 5 ++ .../defaultParameterImplicitlyUsed3.kt | 9 ++ .../defaultParameterImplicitlyUsed3.kt.after | 5 ++ .../defaultParameterImplicitlyUsed4.kt | 9 ++ .../defaultParameterImplicitlyUsed4.kt.after | 5 ++ .../AbstractInlinePostProcessor.kt | 3 +- .../inline/codeInliner/InlinePostProcessor.kt | 88 +++++++++++++++++++ .../inline/KotlinFirInlineTestGenerated.java | 35 ++++++++ 18 files changed, 257 insertions(+), 2 deletions(-) create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterDiffers.kt create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterDiffers.kt.after create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterDiffers1.kt create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterDiffers1.kt.after create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed.kt create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed.kt.after create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed1.kt create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed1.kt.after create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed2.kt create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed2.kt.after create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed3.kt create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed3.kt.after create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed4.kt create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed4.kt.after 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 9fb1ffbcf5e2..76aca08b9130 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 @@ -2075,6 +2075,41 @@ public abstract class InlineTestGenerated extends AbstractInlineTest { runTest("testData/refactoring/inline/namedFunction/defaultParameter.kt"); } + @TestMetadata("defaultParameterDiffers.kt") + public void testDefaultParameterDiffers() throws Exception { + runTest("testData/refactoring/inline/namedFunction/defaultParameterDiffers.kt"); + } + + @TestMetadata("defaultParameterDiffers1.kt") + public void testDefaultParameterDiffers1() throws Exception { + runTest("testData/refactoring/inline/namedFunction/defaultParameterDiffers1.kt"); + } + + @TestMetadata("defaultParameterImplicitlyUsed.kt") + public void testDefaultParameterImplicitlyUsed() throws Exception { + runTest("testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed.kt"); + } + + @TestMetadata("defaultParameterImplicitlyUsed1.kt") + public void testDefaultParameterImplicitlyUsed1() throws Exception { + runTest("testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed1.kt"); + } + + @TestMetadata("defaultParameterImplicitlyUsed2.kt") + public void testDefaultParameterImplicitlyUsed2() throws Exception { + runTest("testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed2.kt"); + } + + @TestMetadata("defaultParameterImplicitlyUsed3.kt") + public void testDefaultParameterImplicitlyUsed3() throws Exception { + runTest("testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed3.kt"); + } + + @TestMetadata("defaultParameterImplicitlyUsed4.kt") + public void testDefaultParameterImplicitlyUsed4() throws Exception { + runTest("testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed4.kt"); + } + @TestMetadata("defaultParameterSubstitution.kt") public void testDefaultParameterSubstitution() throws Exception { runTest("testData/refactoring/inline/namedFunction/defaultParameterSubstitution.kt"); diff --git a/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterDiffers.kt b/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterDiffers.kt new file mode 100644 index 000000000000..e7d7b90c59c1 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterDiffers.kt @@ -0,0 +1,9 @@ +fun oldFun(p1: String = "", p2: Int = 0) { + newFun(p1, p2) +} + +fun newFun(p1: String = "", p2: Int = 42, p3: Int = -1) {} + +fun foo() { + oldFun() +} diff --git a/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterDiffers.kt.after b/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterDiffers.kt.after new file mode 100644 index 000000000000..0ea8055cf4ac --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterDiffers.kt.after @@ -0,0 +1,5 @@ +fun newFun(p1: String = "", p2: Int = 42, p3: Int = -1) {} + +fun foo() { + newFun("", 0) +} diff --git a/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterDiffers1.kt b/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterDiffers1.kt new file mode 100644 index 000000000000..71a4b2b5b8d5 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterDiffers1.kt @@ -0,0 +1,9 @@ +fun oldFun(p1: String = "", p2: Int = 0) { + newFun(p1, p2) +} + +fun newFun(p1: String = "", p2: Int = p1.length, p3: Int = -1) {} + +fun foo() { + oldFun() +} diff --git a/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterDiffers1.kt.after b/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterDiffers1.kt.after new file mode 100644 index 000000000000..4f1ba93a56d0 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterDiffers1.kt.after @@ -0,0 +1,5 @@ +fun newFun(p1: String = "", p2: Int = p1.length, p3: Int = -1) {} + +fun foo() { + newFun("", 0) +} diff --git a/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed.kt b/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed.kt new file mode 100644 index 000000000000..5ef03ab11b0c --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed.kt @@ -0,0 +1,9 @@ +fun oldFun(p1: String = "", p2: Int = 0) { + newFun(p1, p2) +} + +fun newFun(p1: String = "", p2: Int = 0, p3: Int = -1) {} + +fun foo() { + oldFun() +} diff --git a/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed.kt.after b/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed.kt.after new file mode 100644 index 000000000000..2353cf410dad --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed.kt.after @@ -0,0 +1,5 @@ +fun newFun(p1: String = "", p2: Int = 0, p3: Int = -1) {} + +fun foo() { + newFun() +} diff --git a/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed1.kt b/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed1.kt new file mode 100644 index 000000000000..15bc91f1b975 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed1.kt @@ -0,0 +1,9 @@ +fun oldFun(p1: String = "", p2: Int = 0, handler: () -> Unit) { + newFun(p2, p1, handler) +} + +fun newFun(a: Int = 0, b: String = "", handler: () -> Unit) {} + +fun foo() { + oldFun { } +} \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed1.kt.after b/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed1.kt.after new file mode 100644 index 000000000000..556e16d8bbeb --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed1.kt.after @@ -0,0 +1,5 @@ +fun newFun(a: Int = 0, b: String = "", handler: () -> Unit) {} + +fun foo() { + newFun { } +} diff --git a/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed2.kt b/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed2.kt new file mode 100644 index 000000000000..07b6e7707ba4 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed2.kt @@ -0,0 +1,9 @@ +fun oldFun(p1: String, p2: Int = p1.length, p3: String? = p1) { + newFun(p1, p2, p3) +} + +fun newFun(x: String, y: Int = x.length, z: String? = "a") {} + +fun foo() { + oldFun("a") +} \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed2.kt.after b/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed2.kt.after new file mode 100644 index 000000000000..f020d6e338f5 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed2.kt.after @@ -0,0 +1,5 @@ +fun newFun(x: String, y: Int = x.length, z: String? = "a") {} + +fun foo() { + newFun("a") +} diff --git a/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed3.kt b/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed3.kt new file mode 100644 index 000000000000..16a0cf3cba0f --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed3.kt @@ -0,0 +1,9 @@ +fun oldFun(p1: String, p2: Int = p1.length, p3: String? = p1) { + newFun(p1, p2, p3) +} + +fun newFun(x: String, y: Int = x.length, z: String? = x) {} + +fun foo() { + oldFun("a") +} \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed3.kt.after b/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed3.kt.after new file mode 100644 index 000000000000..359114a33ac7 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed3.kt.after @@ -0,0 +1,5 @@ +fun newFun(x: String, y: Int = x.length, z: String? = x) {} + +fun foo() { + newFun("a") +} diff --git a/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed4.kt b/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed4.kt new file mode 100644 index 000000000000..e8212bddb9be --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed4.kt @@ -0,0 +1,9 @@ +fun oldFun(p1: String, p2: Int = p1.length, p3: String? = p1) { + newFun(p1, p2, p3) +} + +fun newFun(x: String, y: Int = x.length, z: String? = "z") {} + +fun foo() { + oldFun("a") +} \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed4.kt.after b/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed4.kt.after new file mode 100644 index 000000000000..4462529c2dfc --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed4.kt.after @@ -0,0 +1,5 @@ +fun newFun(x: String, y: Int = x.length, z: String? = "z") {} + +fun foo() { + newFun("a", "a".length, "a") +} diff --git a/plugins/kotlin/refactorings/kotlin.refactorings.common/src/org/jetbrains/kotlin/idea/refactoring/inline/codeInliner/AbstractInlinePostProcessor.kt b/plugins/kotlin/refactorings/kotlin.refactorings.common/src/org/jetbrains/kotlin/idea/refactoring/inline/codeInliner/AbstractInlinePostProcessor.kt index 96596b9899cd..8a9953819b02 100644 --- a/plugins/kotlin/refactorings/kotlin.refactorings.common/src/org/jetbrains/kotlin/idea/refactoring/inline/codeInliner/AbstractInlinePostProcessor.kt +++ b/plugins/kotlin/refactorings/kotlin.refactorings.common/src/org/jetbrains/kotlin/idea/refactoring/inline/codeInliner/AbstractInlinePostProcessor.kt @@ -31,9 +31,8 @@ abstract class AbstractInlinePostProcessor { protected abstract fun removeExplicitTypeArguments(pointer: SmartPsiElementPointer) protected abstract fun shortenReferences(pointers: List>): List - //no tests fail protected open fun introduceNamedArguments(pointer: SmartPsiElementPointer) {} - protected open fun dropArgumentsForDefaultValues(pointer: SmartPsiElementPointer) {} + protected abstract fun dropArgumentsForDefaultValues(pointer: SmartPsiElementPointer) fun postProcessInsertedCode( pointers: List>, 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 18e7be39000f..2738dde02433 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 @@ -1,24 +1,36 @@ // Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.kotlin.idea.k2.refactoring.inline.codeInliner +import com.intellij.openapi.util.Key +import com.intellij.openapi.util.NlsSafe import com.intellij.psi.SmartPsiElementPointer import org.jetbrains.kotlin.analysis.api.analyze +import org.jetbrains.kotlin.analysis.api.calls.singleFunctionCallOrNull +import org.jetbrains.kotlin.analysis.api.calls.symbol import org.jetbrains.kotlin.analysis.api.components.ShortenOptions +import org.jetbrains.kotlin.analysis.api.symbols.KaValueParameterSymbol +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 import org.jetbrains.kotlin.idea.k2.refactoring.canMoveLambdaOutsideParentheses import org.jetbrains.kotlin.idea.k2.refactoring.inline.KotlinInlineAnonymousFunctionProcessor +import org.jetbrains.kotlin.idea.k2.refactoring.introduce.K2SemanticMatcher.isSemanticMatch import org.jetbrains.kotlin.idea.k2.refactoring.util.areTypeArgumentsRedundant import org.jetbrains.kotlin.idea.k2.refactoring.util.isRedundantUnit import org.jetbrains.kotlin.idea.refactoring.inline.codeInliner.AbstractInlinePostProcessor +import org.jetbrains.kotlin.idea.refactoring.inline.codeInliner.InlineDataKeys.DEFAULT_PARAMETER_VALUE_KEY import org.jetbrains.kotlin.idea.refactoring.inline.codeInliner.InlineDataKeys.USER_CODE_KEY import org.jetbrains.kotlin.idea.references.mainReference +import org.jetbrains.kotlin.psi.KtCallElement import org.jetbrains.kotlin.psi.KtCallExpression import org.jetbrains.kotlin.psi.KtDotQualifiedExpression import org.jetbrains.kotlin.psi.KtElement +import org.jetbrains.kotlin.psi.KtExpression import org.jetbrains.kotlin.psi.KtFunction +import org.jetbrains.kotlin.psi.KtLambdaArgument import org.jetbrains.kotlin.psi.KtNamedDeclaration import org.jetbrains.kotlin.psi.KtReferenceExpression +import org.jetbrains.kotlin.psi.KtSimpleNameExpression import org.jetbrains.kotlin.psi.KtTypeArgumentList import org.jetbrains.kotlin.psi.KtValueArgument import org.jetbrains.kotlin.psi.KtValueArgumentList @@ -118,4 +130,80 @@ object InlinePostProcessor: AbstractInlinePostProcessor() { } } + override fun dropArgumentsForDefaultValues(pointer: SmartPsiElementPointer) { + val result = pointer.element ?: return + + val argumentsToDrop = ArrayList() + + result.forEachDescendantOfType { callExpression -> + analyze(callExpression) { + val functionCall = callExpression.resolveCall()?.singleFunctionCallOrNull() ?: return@forEachDescendantOfType + + val arguments = functionCall.argumentMapping.entries.toList() + val valueParameters = functionCall.partiallyAppliedSymbol.symbol.valueParameters + for ((argument, param) in arguments.asReversed()) { + val defaultValue = param.symbol.defaultValue + + fun substituteDefaultValueWithPassedArguments(): @NlsSafe String? { + val key = Key("SUBSTITUTION") + var needToSubstitute = false + defaultValue?.forEachDescendantOfType { + val symbol = it.mainReference.resolveToSymbol() + if (symbol is KaValueParameterSymbol && symbol in valueParameters) { + it.putCopyableUserData( + key, + functionCall.argumentMapping.entries.firstOrNull { it.value.symbol == symbol }?.key + ) + needToSubstitute = true + } + } + + if (!needToSubstitute) return null + + val copy = defaultValue!!.copy() + + defaultValue.forEachDescendantOfType { + it.putCopyableUserData(key, null) + } + + copy.getCopyableUserData(key)?.let { + return it.text + } + + copy.forEachDescendantOfType { expr -> + val replacement = expr.getCopyableUserData(key) + if (replacement != null) { + expr.replace(replacement) + } + } + + return copy.text + } + + val substitutedValueText = substituteDefaultValueWithPassedArguments() + + val valueArgument = argument.parent as? KtValueArgument ?: break + if (valueArgument.getCopyableUserData(DEFAULT_PARAMETER_VALUE_KEY) == null || + defaultValue == null || + !argument.isSemanticMatch(defaultValue) && (substitutedValueText == null || argument.text != substitutedValueText)) { + // for a named argument, we can try to drop arguments before it as well + if (!valueArgument.isNamed() && valueArgument !is KtLambdaArgument) break else continue + } + + argumentsToDrop.add(valueArgument) + } + } + } + + for (argument in argumentsToDrop) { + val argumentList = argument.parent as KtValueArgumentList + argumentList.removeArgument(argument) + if (argumentList.arguments.isEmpty()) { + val callExpression = argumentList.parent as KtCallElement + if (callExpression.lambdaArguments.isNotEmpty()) { + argumentList.delete() + } + } + } + } } \ No newline at end of file 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 120299e077fc..91ea83fbdf36 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 @@ -784,6 +784,41 @@ public abstract class KotlinFirInlineTestGenerated extends AbstractKotlinFirInli runTest("../../idea/tests/testData/refactoring/inline/namedFunction/defaultParameter.kt"); } + @TestMetadata("defaultParameterDiffers.kt") + public void testDefaultParameterDiffers() throws Exception { + runTest("../../idea/tests/testData/refactoring/inline/namedFunction/defaultParameterDiffers.kt"); + } + + @TestMetadata("defaultParameterDiffers1.kt") + public void testDefaultParameterDiffers1() throws Exception { + runTest("../../idea/tests/testData/refactoring/inline/namedFunction/defaultParameterDiffers1.kt"); + } + + @TestMetadata("defaultParameterImplicitlyUsed.kt") + public void testDefaultParameterImplicitlyUsed() throws Exception { + runTest("../../idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed.kt"); + } + + @TestMetadata("defaultParameterImplicitlyUsed1.kt") + public void testDefaultParameterImplicitlyUsed1() throws Exception { + runTest("../../idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed1.kt"); + } + + @TestMetadata("defaultParameterImplicitlyUsed2.kt") + public void testDefaultParameterImplicitlyUsed2() throws Exception { + runTest("../../idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed2.kt"); + } + + @TestMetadata("defaultParameterImplicitlyUsed3.kt") + public void testDefaultParameterImplicitlyUsed3() throws Exception { + runTest("../../idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed3.kt"); + } + + @TestMetadata("defaultParameterImplicitlyUsed4.kt") + public void testDefaultParameterImplicitlyUsed4() throws Exception { + runTest("../../idea/tests/testData/refactoring/inline/namedFunction/defaultParameterImplicitlyUsed4.kt"); + } + @TestMetadata("defaultParameterSubstitution.kt") public void testDefaultParameterSubstitution() throws Exception { runTest("../../idea/tests/testData/refactoring/inline/namedFunction/defaultParameterSubstitution.kt");