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);
}