Introduce Variable: Forbid extraction from class initializer (aside of its

body)
 #KT-8329 Fixed
This commit is contained in:
Alexey Sedunov
2015-09-02 15:17:46 +03:00
parent c005fe613f
commit fa8fcb53c5
4 changed files with 15 additions and 6 deletions
@@ -330,8 +330,7 @@ public class KotlinIntroduceVariableHandler extends KotlinIntroduceHandlerBase {
JetProperty property = psiFactory.createProperty(variableText);
PsiElement anchor = calculateAnchor(commonParent, commonContainer, allReplaces);
if (anchor == null) return;
boolean needBraces = !(commonContainer instanceof JetBlockExpression ||
commonContainer instanceof JetClassInitializer);
boolean needBraces = !(commonContainer instanceof JetBlockExpression);
if (!needBraces) {
property = (JetProperty)commonContainer.addBefore(property, anchor);
commonContainer.addBefore(psiFactory.createNewLine(), anchor);
@@ -548,7 +547,7 @@ public class KotlinIntroduceVariableHandler extends KotlinIntroduceHandlerBase {
@Nullable
private static PsiElement getContainer(PsiElement place) {
if (place instanceof JetBlockExpression || place instanceof JetClassInitializer) {
if (place instanceof JetBlockExpression) {
return place;
}
while (place != null) {
@@ -559,8 +558,7 @@ public class KotlinIntroduceVariableHandler extends KotlinIntroduceHandlerBase {
}
}
if (parent instanceof JetBlockExpression
|| (parent instanceof JetWhenEntry && place == ((JetWhenEntry) parent).getExpression())
|| parent instanceof JetClassInitializer) {
|| (parent instanceof JetWhenEntry && place == ((JetWhenEntry) parent).getExpression())) {
return parent;
}
if (parent instanceof JetDeclarationWithBody && ((JetDeclarationWithBody) parent).getBodyExpression() == place) {
@@ -596,7 +594,7 @@ public class KotlinIntroduceVariableHandler extends KotlinIntroduceHandlerBase {
result = parent;
}
}
else if (parent instanceof JetClassBody || parent instanceof JetFile || parent instanceof JetClassInitializer) {
else if (parent instanceof JetClassBody || parent instanceof JetFile) {
return result;
}
else if (parent instanceof JetBlockExpression) {
@@ -0,0 +1,4 @@
class C {
deprecated(<selection>""</selection>)
init {}
}
@@ -0,0 +1 @@
Cannot refactor in this place
@@ -145,6 +145,12 @@ public class JetExtractionTestGenerated extends AbstractJetExtractionTest {
doIntroduceVariableTest(fileName);
}
@TestMetadata("InsideOfInitializerAnnotation.kt")
public void testInsideOfInitializerAnnotation() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/introduceVariable/InsideOfInitializerAnnotation.kt");
doIntroduceVariableTest(fileName);
}
@TestMetadata("IntroduceAndCreateBlock.kt")
public void testIntroduceAndCreateBlock() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/introduceVariable/IntroduceAndCreateBlock.kt");