From 5166cdbc96003f834759b5a430591c6712a4747c Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Tue, 19 May 2015 15:48:58 +0300 Subject: [PATCH] Introduce...: Allow semicolon extraction #KT-7583 Fixed --- .../kotlin/idea/codeInsight/CodeInsightUtils.java | 6 +++++- .../refactoring/extractFunction/basic/lineWithSemicolon.kt | 3 +++ .../extractFunction/basic/lineWithSemicolon.kt.after | 7 +++++++ .../refactoring/introduce/JetExtractionTestGenerated.java | 6 ++++++ 4 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 idea/testData/refactoring/extractFunction/basic/lineWithSemicolon.kt create mode 100644 idea/testData/refactoring/extractFunction/basic/lineWithSemicolon.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/codeInsight/CodeInsightUtils.java b/idea/src/org/jetbrains/kotlin/idea/codeInsight/CodeInsightUtils.java index 78f0cd46aec..864b1455597 100644 --- a/idea/src/org/jetbrains/kotlin/idea/codeInsight/CodeInsightUtils.java +++ b/idea/src/org/jetbrains/kotlin/idea/codeInsight/CodeInsightUtils.java @@ -27,6 +27,7 @@ import com.intellij.refactoring.util.CommonRefactoringUtil; import com.intellij.util.text.CharArrayUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.kotlin.lexer.JetTokens; import org.jetbrains.kotlin.psi.*; import org.jetbrains.kotlin.types.JetType; @@ -100,7 +101,10 @@ public class CodeInsightUtils { } for (PsiElement element : array) { - if (!(element instanceof JetExpression || element instanceof PsiWhiteSpace || element instanceof PsiComment)) { + if (!(element instanceof JetExpression + || element.getNode().getElementType() == JetTokens.SEMICOLON + || element instanceof PsiWhiteSpace + || element instanceof PsiComment)) { return PsiElement.EMPTY_ARRAY; } } diff --git a/idea/testData/refactoring/extractFunction/basic/lineWithSemicolon.kt b/idea/testData/refactoring/extractFunction/basic/lineWithSemicolon.kt new file mode 100644 index 00000000000..74afa3df6bc --- /dev/null +++ b/idea/testData/refactoring/extractFunction/basic/lineWithSemicolon.kt @@ -0,0 +1,3 @@ +fun foo() { + println("Hey!"); +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/basic/lineWithSemicolon.kt.after b/idea/testData/refactoring/extractFunction/basic/lineWithSemicolon.kt.after new file mode 100644 index 00000000000..f67026d46a5 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/basic/lineWithSemicolon.kt.after @@ -0,0 +1,7 @@ +fun foo() { + __dummyTestFun__() +} + +private fun __dummyTestFun__() { + println("Hey!"); +} \ 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 cb9b51f8360..23147634fdb 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/JetExtractionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/JetExtractionTestGenerated.java @@ -378,6 +378,12 @@ public class JetExtractionTestGenerated extends AbstractJetExtractionTest { doExtractFunctionTest(fileName); } + @TestMetadata("lineWithSemicolon.kt") + public void testLineWithSemicolon() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/extractFunction/basic/lineWithSemicolon.kt"); + doExtractFunctionTest(fileName); + } + @TestMetadata("localClassExtraction.kt") public void testLocalClassExtraction() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/extractFunction/basic/localClassExtraction.kt");