From 3038e2382b215f19d98718d750bf7de83648c202 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Tue, 1 Sep 2015 18:43:36 +0300 Subject: [PATCH] Introduce Variable: Forbid in the class body and at the top level #KT-8735 Fixed --- .../KotlinIntroduceVariableHandler.java | 24 +++++++++---------- .../introduceVariable/CantIntroduceToClass.kt | 3 +++ .../CantIntroduceToClass.kt.conflicts | 1 + .../introduceVariable/CantIntroduceToFile.kt | 1 + .../CantIntroduceToFile.kt.conflicts | 1 + .../introduceVariable/ClassBody.kt | 3 --- .../introduceVariable/ClassBody.kt.after | 4 ---- .../introduce/JetExtractionTestGenerated.java | 12 +++++++--- 8 files changed, 26 insertions(+), 23 deletions(-) create mode 100644 idea/testData/refactoring/introduceVariable/CantIntroduceToClass.kt create mode 100644 idea/testData/refactoring/introduceVariable/CantIntroduceToClass.kt.conflicts create mode 100644 idea/testData/refactoring/introduceVariable/CantIntroduceToFile.kt create mode 100644 idea/testData/refactoring/introduceVariable/CantIntroduceToFile.kt.conflicts delete mode 100644 idea/testData/refactoring/introduceVariable/ClassBody.kt delete mode 100644 idea/testData/refactoring/introduceVariable/ClassBody.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceVariable/KotlinIntroduceVariableHandler.java b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceVariable/KotlinIntroduceVariableHandler.java index bf40ab05c3f..4f454ef70a1 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceVariable/KotlinIntroduceVariableHandler.java +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceVariable/KotlinIntroduceVariableHandler.java @@ -24,7 +24,10 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.Pass; import com.intellij.openapi.util.Ref; -import com.intellij.psi.*; +import com.intellij.psi.PsiDocumentManager; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; +import com.intellij.psi.PsiWhiteSpace; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.refactoring.HelpID; import com.intellij.refactoring.introduce.inplace.OccurrencesChooser; @@ -64,7 +67,10 @@ import org.jetbrains.kotlin.resolve.scopes.JetScope; import org.jetbrains.kotlin.types.JetType; import org.jetbrains.kotlin.types.checker.JetTypeChecker; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; import static org.jetbrains.kotlin.psi.PsiPackage.JetPsiFactory; @@ -325,7 +331,6 @@ public class KotlinIntroduceVariableHandler extends KotlinIntroduceHandlerBase { PsiElement anchor = calculateAnchor(commonParent, commonContainer, allReplaces); if (anchor == null) return; boolean needBraces = !(commonContainer instanceof JetBlockExpression || - commonContainer instanceof JetClassBody || commonContainer instanceof JetClassInitializer); if (!needBraces) { property = (JetProperty)commonContainer.addBefore(property, anchor); @@ -543,8 +548,7 @@ public class KotlinIntroduceVariableHandler extends KotlinIntroduceHandlerBase { @Nullable private static PsiElement getContainer(PsiElement place) { - if (place instanceof JetBlockExpression || place instanceof JetClassBody || - place instanceof JetClassInitializer) { + if (place instanceof JetBlockExpression || place instanceof JetClassInitializer) { return place; } while (place != null) { @@ -554,8 +558,7 @@ public class KotlinIntroduceVariableHandler extends KotlinIntroduceHandlerBase { return parent; } } - if (parent instanceof JetBlockExpression || parent instanceof JetWhenEntry || - parent instanceof JetClassBody || parent instanceof JetClassInitializer) { + if (parent instanceof JetBlockExpression || parent instanceof JetWhenEntry || parent instanceof JetClassInitializer) { return parent; } if (parent instanceof JetDeclarationWithBody && ((JetDeclarationWithBody) parent).getBodyExpression() == place) { @@ -592,12 +595,7 @@ public class KotlinIntroduceVariableHandler extends KotlinIntroduceHandlerBase { } } else if (parent instanceof JetClassBody || parent instanceof JetFile || parent instanceof JetClassInitializer) { - if (result == null) { - return parent; - } - else { - return result; - } + return result; } else if (parent instanceof JetBlockExpression) { result = parent; diff --git a/idea/testData/refactoring/introduceVariable/CantIntroduceToClass.kt b/idea/testData/refactoring/introduceVariable/CantIntroduceToClass.kt new file mode 100644 index 00000000000..fcda45a87e7 --- /dev/null +++ b/idea/testData/refactoring/introduceVariable/CantIntroduceToClass.kt @@ -0,0 +1,3 @@ +class X { + val s = 10.toString() +} \ No newline at end of file diff --git a/idea/testData/refactoring/introduceVariable/CantIntroduceToClass.kt.conflicts b/idea/testData/refactoring/introduceVariable/CantIntroduceToClass.kt.conflicts new file mode 100644 index 00000000000..1568c6aea62 --- /dev/null +++ b/idea/testData/refactoring/introduceVariable/CantIntroduceToClass.kt.conflicts @@ -0,0 +1 @@ +Cannot refactor in this place diff --git a/idea/testData/refactoring/introduceVariable/CantIntroduceToFile.kt b/idea/testData/refactoring/introduceVariable/CantIntroduceToFile.kt new file mode 100644 index 00000000000..20e5ce995e0 --- /dev/null +++ b/idea/testData/refactoring/introduceVariable/CantIntroduceToFile.kt @@ -0,0 +1 @@ +val s = 10.toString() \ No newline at end of file diff --git a/idea/testData/refactoring/introduceVariable/CantIntroduceToFile.kt.conflicts b/idea/testData/refactoring/introduceVariable/CantIntroduceToFile.kt.conflicts new file mode 100644 index 00000000000..1568c6aea62 --- /dev/null +++ b/idea/testData/refactoring/introduceVariable/CantIntroduceToFile.kt.conflicts @@ -0,0 +1 @@ +Cannot refactor in this place diff --git a/idea/testData/refactoring/introduceVariable/ClassBody.kt b/idea/testData/refactoring/introduceVariable/ClassBody.kt deleted file mode 100644 index a71fafec3f1..00000000000 --- a/idea/testData/refactoring/introduceVariable/ClassBody.kt +++ /dev/null @@ -1,3 +0,0 @@ -open class A { - val x = 1 -} \ No newline at end of file diff --git a/idea/testData/refactoring/introduceVariable/ClassBody.kt.after b/idea/testData/refactoring/introduceVariable/ClassBody.kt.after deleted file mode 100644 index 937980e268c..00000000000 --- a/idea/testData/refactoring/introduceVariable/ClassBody.kt.after +++ /dev/null @@ -1,4 +0,0 @@ -open class A { - val i = 1 - val x = i -} \ 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 09084b40d8b..a654f6aab76 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/JetExtractionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/JetExtractionTestGenerated.java @@ -49,9 +49,15 @@ public class JetExtractionTestGenerated extends AbstractJetExtractionTest { doIntroduceVariableTest(fileName); } - @TestMetadata("ClassBody.kt") - public void testClassBody() throws Exception { - String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/introduceVariable/ClassBody.kt"); + @TestMetadata("CantIntroduceToClass.kt") + public void testCantIntroduceToClass() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/introduceVariable/CantIntroduceToClass.kt"); + doIntroduceVariableTest(fileName); + } + + @TestMetadata("CantIntroduceToFile.kt") + public void testCantIntroduceToFile() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/introduceVariable/CantIntroduceToFile.kt"); doIntroduceVariableTest(fileName); }