diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/ExtractionData.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/ExtractionData.kt index f57341c51d0..6a8abf49abf 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/ExtractionData.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/ExtractionData.kt @@ -19,40 +19,29 @@ package org.jetbrains.kotlin.idea.refactoring.introduce.extractionEngine import com.intellij.psi.PsiElement import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall -import org.jetbrains.kotlin.psi.JetFile import com.intellij.openapi.project.Project -import org.jetbrains.kotlin.psi.JetExpression import com.intellij.openapi.util.TextRange import kotlin.properties.Delegates import java.util.HashMap import org.jetbrains.kotlin.idea.codeInsight.JetFileReferencesResolver -import org.jetbrains.kotlin.psi.JetSimpleNameExpression import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde import java.util.Collections -import org.jetbrains.kotlin.psi.JetBlockExpression -import org.jetbrains.kotlin.psi.JetQualifiedExpression import org.jetbrains.kotlin.psi.psiUtil.isInsideOf import java.util.ArrayList import com.intellij.psi.PsiNamedElement -import org.jetbrains.kotlin.psi.JetSuperExpression import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.resolve.scopes.receivers.ThisReceiver import org.jetbrains.kotlin.descriptors.ClassKind -import org.jetbrains.kotlin.psi.JetDeclaration -import org.jetbrains.kotlin.psi.JetDeclarationWithBody -import org.jetbrains.kotlin.psi.JetUserType import org.jetbrains.kotlin.resolve.calls.model.VariableAsFunctionResolvedCall import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor -import org.jetbrains.kotlin.psi.JetPsiFactory -import org.jetbrains.kotlin.psi.JetFunctionLiteral -import org.jetbrains.kotlin.psi.JetClassInitializer import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils import org.jetbrains.kotlin.idea.util.psi.patternMatching.JetPsiRange import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType import org.jetbrains.kotlin.idea.refactoring.compareDescriptors import org.jetbrains.kotlin.resolve.DescriptorUtils +import org.jetbrains.kotlin.psi.* data class ExtractionOptions( val inferUnitTypeForUnusedValues: Boolean = true, @@ -127,6 +116,7 @@ data class ExtractionData( for ((ref, context) in JetFileReferencesResolver.resolve(originalFile, getExpressions())) { if (ref !is JetSimpleNameExpression) continue + if (ref.getParent() is JetValueArgumentName) continue val resolvedCall = ref.getResolvedCall(context)?.let { (it as? VariableAsFunctionResolvedCall)?.functionCall ?: it diff --git a/idea/testData/refactoring/extractFunction/parameters/misc/namedArguments.kt b/idea/testData/refactoring/extractFunction/parameters/misc/namedArguments.kt new file mode 100644 index 00000000000..01143f98796 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/parameters/misc/namedArguments.kt @@ -0,0 +1,9 @@ +// PARAM_TYPES: kotlin.String +// PARAM_DESCRIPTOR: val a: kotlin.String defined in main + +fun main(args: Array) { + val a = "sdfsf" + a.def(a = 1, b = "") +} + +fun String.def(a: Int = 1, b: String) {} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/parameters/misc/namedArguments.kt.after b/idea/testData/refactoring/extractFunction/parameters/misc/namedArguments.kt.after new file mode 100644 index 00000000000..f34c43e3900 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/parameters/misc/namedArguments.kt.after @@ -0,0 +1,13 @@ +// PARAM_TYPES: kotlin.String +// PARAM_DESCRIPTOR: val a: kotlin.String defined in main + +fun main(args: Array) { + val a = "sdfsf" + __dummyTestFun__(a) +} + +private fun __dummyTestFun__(a: String) { + a.def(a = 1, b = "") +} + +fun String.def(a: Int = 1, b: String) {} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/JetExtractionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/JetExtractionTestGenerated.java index decc4fac77b..97fb93a4294 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/JetExtractionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/JetExtractionTestGenerated.java @@ -1732,6 +1732,12 @@ public class JetExtractionTestGenerated extends AbstractJetExtractionTest { doExtractFunctionTest(fileName); } + @TestMetadata("namedArguments.kt") + public void testNamedArguments() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/extractFunction/parameters/misc/namedArguments.kt"); + doExtractFunctionTest(fileName); + } + @TestMetadata("qualifiedAnnotation.kt") public void testQualifiedAnnotation() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/extractFunction/parameters/misc/qualifiedAnnotation.kt");