Fixed KT-1295, first part of removing 'println'. Undo part is still not working.
This commit is contained in:
+65
-4
@@ -208,9 +208,70 @@ public class JetIntroduceVariableHandler extends JetIntroduceHandlerBase {
|
|||||||
JetExpression emptyBody = JetPsiFactory.createEmptyBody(project);
|
JetExpression emptyBody = JetPsiFactory.createEmptyBody(project);
|
||||||
PsiElement firstChild = emptyBody.getFirstChild();
|
PsiElement firstChild = emptyBody.getFirstChild();
|
||||||
emptyBody.addAfter(JetPsiFactory.createWhiteSpace(project, "\n"), firstChild);
|
emptyBody.addAfter(JetPsiFactory.createWhiteSpace(project, "\n"), firstChild);
|
||||||
property = (JetProperty) emptyBody.addAfter(property, firstChild);
|
if (replaceOccurrence && commonContainer != null) {
|
||||||
emptyBody.addAfter(JetPsiFactory.createWhiteSpace(project, "\n"), firstChild);
|
for (JetExpression replace : allReplaces) {
|
||||||
emptyBody = (JetExpression) anchor.replace(emptyBody);
|
boolean isActualExpression = expression == replace;
|
||||||
|
JetExpression element = (JetExpression) replace.replace(JetPsiFactory.createExpression(project, suggestedNames[0]));
|
||||||
|
if (isActualExpression) reference.set(element);
|
||||||
|
}
|
||||||
|
PsiElement oldElement = commonContainer;
|
||||||
|
if (commonContainer instanceof JetWhenEntry) {
|
||||||
|
JetExpression body = ((JetWhenEntry) commonContainer).getExpression();
|
||||||
|
if (body != null) {
|
||||||
|
oldElement = body;
|
||||||
|
}
|
||||||
|
} else if (commonContainer instanceof JetNamedFunction) {
|
||||||
|
JetExpression body = ((JetNamedFunction) commonContainer).getBodyExpression();
|
||||||
|
if (body != null) {
|
||||||
|
oldElement = body;
|
||||||
|
}
|
||||||
|
} else if (commonContainer instanceof JetSecondaryConstructor) {
|
||||||
|
JetExpression body = ((JetSecondaryConstructor) commonContainer).getBodyExpression();
|
||||||
|
if (body != null) {
|
||||||
|
oldElement = body;
|
||||||
|
}
|
||||||
|
} else if (commonContainer instanceof JetContainerNode) {
|
||||||
|
JetContainerNode container = (JetContainerNode) commonContainer;
|
||||||
|
PsiElement[] children = container.getChildren();
|
||||||
|
for (PsiElement child : children) {
|
||||||
|
if (child instanceof JetExpression) {
|
||||||
|
oldElement = child;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//ugly logic to make sure we are working with right actual expression
|
||||||
|
JetExpression actualExpression = reference.get();
|
||||||
|
int diff = actualExpression.getTextRange().getStartOffset() - oldElement.getTextRange().getStartOffset();
|
||||||
|
String actualExpressionText = actualExpression.getText();
|
||||||
|
PsiElement newElement = emptyBody.addAfter(oldElement, firstChild);
|
||||||
|
PsiElement elem = newElement.findElementAt(diff);
|
||||||
|
while (elem != null && !(elem instanceof JetExpression &&
|
||||||
|
actualExpressionText.equals(elem.getText()))) {
|
||||||
|
elem = elem.getParent();
|
||||||
|
}
|
||||||
|
if (elem != null) {
|
||||||
|
reference.set((JetExpression) elem);
|
||||||
|
}
|
||||||
|
emptyBody.addAfter(JetPsiFactory.createWhiteSpace(project, "\n"), firstChild);
|
||||||
|
property = (JetProperty) emptyBody.addAfter(property, firstChild);
|
||||||
|
emptyBody.addAfter(JetPsiFactory.createWhiteSpace(project, "\n"), firstChild);
|
||||||
|
actualExpression = reference.get();
|
||||||
|
diff = actualExpression.getTextRange().getStartOffset() - emptyBody.getTextRange().getStartOffset();
|
||||||
|
actualExpressionText = actualExpression.getText();
|
||||||
|
emptyBody = (JetExpression) anchor.replace(emptyBody);
|
||||||
|
elem = emptyBody.findElementAt(diff);
|
||||||
|
while (elem != null && !(elem instanceof JetExpression &&
|
||||||
|
actualExpressionText.equals(elem.getText()))) {
|
||||||
|
elem = elem.getParent();
|
||||||
|
}
|
||||||
|
if (elem != null) {
|
||||||
|
reference.set((JetExpression) elem);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
property = (JetProperty) emptyBody.addAfter(property, firstChild);
|
||||||
|
emptyBody.addAfter(JetPsiFactory.createWhiteSpace(project, "\n"), firstChild);
|
||||||
|
emptyBody = (JetExpression) anchor.replace(emptyBody);
|
||||||
|
}
|
||||||
for (PsiElement child : emptyBody.getChildren()) {
|
for (PsiElement child : emptyBody.getChildren()) {
|
||||||
if (child instanceof JetProperty) {
|
if (child instanceof JetProperty) {
|
||||||
property = (JetProperty) child;
|
property = (JetProperty) child;
|
||||||
@@ -239,7 +300,7 @@ public class JetIntroduceVariableHandler extends JetIntroduceHandlerBase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (JetExpression replace : allReplaces) {
|
for (JetExpression replace : allReplaces) {
|
||||||
if (replaceOccurrence) {
|
if (replaceOccurrence && !needBraces) {
|
||||||
boolean isActualExpression = expression == replace;
|
boolean isActualExpression = expression == replace;
|
||||||
JetExpression element = (JetExpression) replace.replace(JetPsiFactory.createExpression(project, suggestedNames[0]));
|
JetExpression element = (JetExpression) replace.replace(JetPsiFactory.createExpression(project, suggestedNames[0]));
|
||||||
references.add(element);
|
references.add(element);
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
open class A() {
|
||||||
|
{
|
||||||
|
do println(<selection>1</selection>) while (true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
open class A() {
|
||||||
|
{
|
||||||
|
do {
|
||||||
|
val i = 1
|
||||||
|
println(i)
|
||||||
|
} while (true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
fun x(): Int = println(<selection>1</selection>)
|
||||||
|
/*
|
||||||
|
fun x(): Int {
|
||||||
|
val i = 1
|
||||||
|
println(i)
|
||||||
|
}
|
||||||
|
*/
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
fun a() {
|
||||||
|
if (true) 2
|
||||||
|
else println(<selection>1</selection>)
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
fun a() {
|
||||||
|
if (true) 2
|
||||||
|
else {
|
||||||
|
val i = 1
|
||||||
|
println(i)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
fun a() {
|
||||||
|
if (true) println(<selection>1</selection>)
|
||||||
|
else 2
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
fun a() {
|
||||||
|
if (true) {
|
||||||
|
val i = 1
|
||||||
|
println(i)
|
||||||
|
} else 2
|
||||||
|
}
|
||||||
|
*/
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
fun a() {
|
||||||
|
when (1) {
|
||||||
|
is 1 -> println(<selection>2</selection>)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
fun a() {
|
||||||
|
when (1) {
|
||||||
|
is 1 -> {
|
||||||
|
val i = 2
|
||||||
|
println(i)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
open class A() {
|
||||||
|
{
|
||||||
|
while (true) println(<selection>1</selection>)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
open class A() {
|
||||||
|
{
|
||||||
|
while (true) {
|
||||||
|
val i = 1
|
||||||
|
println(i)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
+25
@@ -37,6 +37,10 @@ public class JetIntroduceVariableTest extends LightCodeInsightFixtureTestCase {
|
|||||||
doTest();
|
doTest();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testDoWhileAddBlockInner() {
|
||||||
|
doTest();
|
||||||
|
}
|
||||||
|
|
||||||
public void testFewOccurrences() {
|
public void testFewOccurrences() {
|
||||||
doTest();
|
doTest();
|
||||||
}
|
}
|
||||||
@@ -45,6 +49,10 @@ public class JetIntroduceVariableTest extends LightCodeInsightFixtureTestCase {
|
|||||||
doTest();
|
doTest();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testFunctionAddBlockInner() {
|
||||||
|
doTest();
|
||||||
|
}
|
||||||
|
|
||||||
public void testIfCondition() {
|
public void testIfCondition() {
|
||||||
doTest();
|
doTest();
|
||||||
}
|
}
|
||||||
@@ -53,10 +61,18 @@ public class JetIntroduceVariableTest extends LightCodeInsightFixtureTestCase {
|
|||||||
doTest();
|
doTest();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testIfElseAddBlockInner() {
|
||||||
|
doTest();
|
||||||
|
}
|
||||||
|
|
||||||
public void testIfThenAddBlock() {
|
public void testIfThenAddBlock() {
|
||||||
doTest();
|
doTest();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testIfThenAddBlockInner() {
|
||||||
|
doTest();
|
||||||
|
}
|
||||||
|
|
||||||
public void testIt() {
|
public void testIt() {
|
||||||
doTest();
|
doTest();
|
||||||
}
|
}
|
||||||
@@ -93,6 +109,10 @@ public class JetIntroduceVariableTest extends LightCodeInsightFixtureTestCase {
|
|||||||
doTest();
|
doTest();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testWhenAddBlockInner() {
|
||||||
|
doTest();
|
||||||
|
}
|
||||||
|
|
||||||
public void testWhenParts() {
|
public void testWhenParts() {
|
||||||
doTest();
|
doTest();
|
||||||
}
|
}
|
||||||
@@ -101,6 +121,10 @@ public class JetIntroduceVariableTest extends LightCodeInsightFixtureTestCase {
|
|||||||
doTest();
|
doTest();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testWhileAddBlockInner() {
|
||||||
|
doTest();
|
||||||
|
}
|
||||||
|
|
||||||
public void testWhileCondition() {
|
public void testWhileCondition() {
|
||||||
doTest();
|
doTest();
|
||||||
}
|
}
|
||||||
@@ -133,6 +157,7 @@ public class JetIntroduceVariableTest extends LightCodeInsightFixtureTestCase {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
int endOffset = file.getLastChild().getTextRange().getStartOffset();
|
int endOffset = file.getLastChild().getTextRange().getStartOffset();
|
||||||
|
// System.out.println(file.getText().substring(0, endOffset).trim());
|
||||||
assertEquals(expectedResultText, file.getText().substring(0, endOffset).trim());
|
assertEquals(expectedResultText, file.getText().substring(0, endOffset).trim());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user