From f4c21d3a287c83ad46dc79237b7930b793b2a0f3 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Thu, 22 May 2014 18:53:46 +0400 Subject: [PATCH] Extract Function: Treat multi declarations as local variables #KT-5054 Fixed --- .../extractFunction/extractFunctionUtils.kt | 4 +++- .../parameters/misc/multiDeclaration.kt | 7 +++++++ .../parameters/misc/multiDeclaration.kt.after | 11 +++++++++++ .../introduceVariable/JetExtractionTestGenerated.java | 5 +++++ 4 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 idea/testData/refactoring/extractFunction/parameters/misc/multiDeclaration.kt create mode 100644 idea/testData/refactoring/extractFunction/parameters/misc/multiDeclaration.kt.after diff --git a/idea/src/org/jetbrains/jet/plugin/refactoring/extractFunction/extractFunctionUtils.kt b/idea/src/org/jetbrains/jet/plugin/refactoring/extractFunction/extractFunctionUtils.kt index 131e041e471..078ffe0a346 100644 --- a/idea/src/org/jetbrains/jet/plugin/refactoring/extractFunction/extractFunctionUtils.kt +++ b/idea/src/org/jetbrains/jet/plugin/refactoring/extractFunction/extractFunctionUtils.kt @@ -343,7 +343,9 @@ private fun ExtractionData.inferParametersInfo( else { val extractThis = hasThisReceiver || thisExpr != null val extractLocalVar = - (originalDeclaration is JetProperty && originalDeclaration.isLocal()) || originalDeclaration is JetParameter + originalDeclaration is JetMultiDeclarationEntry || + (originalDeclaration is JetProperty && originalDeclaration.isLocal()) || + originalDeclaration is JetParameter val descriptorToExtract = (if (extractThis) thisDescriptor else null) ?: originalDescriptor diff --git a/idea/testData/refactoring/extractFunction/parameters/misc/multiDeclaration.kt b/idea/testData/refactoring/extractFunction/parameters/misc/multiDeclaration.kt new file mode 100644 index 00000000000..e3e6b45d5a7 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/parameters/misc/multiDeclaration.kt @@ -0,0 +1,7 @@ +// SIBLING: +fun main(args: Array) { + val (a, b) = Data(1, 2) + a +} + +data class Data(val a: Int, val b: Int) \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/parameters/misc/multiDeclaration.kt.after b/idea/testData/refactoring/extractFunction/parameters/misc/multiDeclaration.kt.after new file mode 100644 index 00000000000..6197dc5540b --- /dev/null +++ b/idea/testData/refactoring/extractFunction/parameters/misc/multiDeclaration.kt.after @@ -0,0 +1,11 @@ +// SIBLING: +fun main(args: Array) { + val (a, b) = Data(1, 2) + unit(a) +} + +fun unit(a: Int) { + a +} + +data class Data(val a: Int, val b: Int) \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/plugin/refactoring/introduce/introduceVariable/JetExtractionTestGenerated.java b/idea/tests/org/jetbrains/jet/plugin/refactoring/introduce/introduceVariable/JetExtractionTestGenerated.java index ae7e2e315f6..b4e61b50051 100644 --- a/idea/tests/org/jetbrains/jet/plugin/refactoring/introduce/introduceVariable/JetExtractionTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/plugin/refactoring/introduce/introduceVariable/JetExtractionTestGenerated.java @@ -724,6 +724,11 @@ public class JetExtractionTestGenerated extends AbstractJetExtractionTest { doExtractFunctionTest("idea/testData/refactoring/extractFunction/parameters/misc/innerClassObject.kt"); } + @TestMetadata("multiDeclaration.kt") + public void testMultiDeclaration() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/parameters/misc/multiDeclaration.kt"); + } + @TestMetadata("multipleOccurrences.kt") public void testMultipleOccurrences() throws Exception { doExtractFunctionTest("idea/testData/refactoring/extractFunction/parameters/misc/multipleOccurrences.kt");