From 40da4bd423cd8ad21245610c1eac0aeb9040798a Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Mon, 20 Oct 2014 16:30:19 +0400 Subject: [PATCH] Extract Function: Do not allow property extraction if return type is Unit #KT-6017 Fixed --- .../extractFunction/ExtractableCodeDescriptor.kt | 2 ++ .../refactoring/extractFunction/asProperty/extractUnit.kt | 5 +++++ .../extractFunction/asProperty/extractUnit.kt.conflicts | 1 + .../introduceVariable/JetExtractionTestGenerated.java | 8 +++++++- 4 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 idea/testData/refactoring/extractFunction/asProperty/extractUnit.kt create mode 100644 idea/testData/refactoring/extractFunction/asProperty/extractUnit.kt.conflicts diff --git a/idea/src/org/jetbrains/jet/plugin/refactoring/extractFunction/ExtractableCodeDescriptor.kt b/idea/src/org/jetbrains/jet/plugin/refactoring/extractFunction/ExtractableCodeDescriptor.kt index ee7c3063d07..d7a9fa6356f 100644 --- a/idea/src/org/jetbrains/jet/plugin/refactoring/extractFunction/ExtractableCodeDescriptor.kt +++ b/idea/src/org/jetbrains/jet/plugin/refactoring/extractFunction/ExtractableCodeDescriptor.kt @@ -66,6 +66,7 @@ import org.jetbrains.jet.lang.psi.JetCallElement import org.jetbrains.jet.lang.psi.psiUtil.getQualifiedElementSelector import org.jetbrains.jet.plugin.util.psi.patternMatching.JetPsiRange import org.jetbrains.jet.lang.resolve.BindingContext +import org.jetbrains.jet.plugin.util.isUnit trait Parameter { val argumentText: String @@ -388,6 +389,7 @@ class ExtractableCodeDescriptorWithConflicts( fun ExtractableCodeDescriptor.canGenerateProperty(): Boolean { if (!parameters.empty) return false + if (controlFlow.outputValueBoxer.returnType.isUnit()) return false val parent = extractionData.targetSibling.getParent() return parent is JetFile || parent is JetClassBody diff --git a/idea/testData/refactoring/extractFunction/asProperty/extractUnit.kt b/idea/testData/refactoring/extractFunction/asProperty/extractUnit.kt new file mode 100644 index 00000000000..f27a0753307 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/asProperty/extractUnit.kt @@ -0,0 +1,5 @@ +// EXTRACT_AS_PROPERTY +// SIBLING: +fun foo() { + 1 + 1 +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/asProperty/extractUnit.kt.conflicts b/idea/testData/refactoring/extractFunction/asProperty/extractUnit.kt.conflicts new file mode 100644 index 00000000000..9ec26226ae5 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/asProperty/extractUnit.kt.conflicts @@ -0,0 +1 @@ +Can't generate property: 1 + 1 \ 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 28585345f12..5f14eae12d8 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 @@ -296,7 +296,13 @@ public class JetExtractionTestGenerated extends AbstractJetExtractionTest { String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/extractFunction/asProperty/extractToFunction.kt"); doExtractFunctionTest(fileName); } - + + @TestMetadata("extractUnit.kt") + public void testExtractUnit() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/extractFunction/asProperty/extractUnit.kt"); + doExtractFunctionTest(fileName); + } + @TestMetadata("extractWithParams.kt") public void testExtractWithParams() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/extractFunction/asProperty/extractWithParams.kt");