introduce: process chained method calls during same occurrences processing (IDEA-124349)

This commit is contained in:
Anna Kozlova
2014-04-24 11:28:18 +02:00
parent 8231d80eac
commit ee2a5d0615
5 changed files with 64 additions and 4 deletions
@@ -153,7 +153,7 @@ public abstract class AbstractJavaInplaceIntroducer extends AbstractInplaceIntro
if (expression == null) {
expression = PsiTreeUtil.getParentOfType(refVariableElement, PsiExpression.class);
}
while (expression instanceof PsiReferenceExpression) {
while (expression instanceof PsiReferenceExpression || expression instanceof PsiMethodCallExpression) {
final PsiElement parent = expression.getParent();
if (parent instanceof PsiMethodCallExpression) {
if (parent.getText().equals(exprText)) return (PsiExpression)parent;
@@ -163,8 +163,10 @@ public abstract class AbstractJavaInplaceIntroducer extends AbstractInplaceIntro
if (expression.getText().equals(exprText)) {
return expression;
}
} else {
} else if (expression instanceof PsiReferenceExpression) {
return null;
} else {
break;
}
}
if (expression != null && expression.isValid() && expression.getText().equals(exprText)) {
@@ -0,0 +1,23 @@
class Test {
private void test() {
TestSubject subject = new TestSubject();
boolean flag = false;
if (subject.getSubject2().get<caret>Val() != flag) {
System.out.println(subject.getSubject2().getVal());
}
}
public static class TestSubject {
public TestSubject2 getSubject2() {
return new TestSubject2();
}
}
public static class TestSubject2 {
public boolean getVal() {
return true;
}
}
}
@@ -0,0 +1,23 @@
class Test {
private void test(boolean val) {
TestSubject subject = new TestSubject();
boolean flag = false;
if (val != flag) {
System.out.println(val);
}
}
public static class TestSubject {
public TestSubject2 getSubject2() {
return new TestSubject2();
}
}
public static class TestSubject2 {
public boolean getVal() {
return true;
}
}
}
@@ -41,6 +41,16 @@ public class InplaceIntroduceParameterTest extends AbstractJavaInplaceIntroduceT
});
}
public void testChainMethodCall() throws Exception {
doTest(new Pass<AbstractInplaceIntroducer>() {
@Override
public void pass(AbstractInplaceIntroducer inplaceIntroduceFieldPopup) {
inplaceIntroduceFieldPopup.setReplaceAllOccurrences(true);
}
});
}
public void testReplaceAll1() throws Exception {
doTest(new Pass<AbstractInplaceIntroducer>() {
@Override
@@ -96,7 +96,7 @@ public abstract class GrAbstractInplaceIntroducer<Settings extends GrIntroduceSe
if (expression == null) {
expression = PsiTreeUtil.getParentOfType(refVariableElement, GrExpression.class);
}
while (expression instanceof GrReferenceExpression) {
while (expression instanceof GrReferenceExpression || expression instanceof GrCall) {
final PsiElement parent = expression.getParent();
if (parent instanceof GrMethodCallExpression) {
if (parent.getText().equals(exprText)) return (GrExpression)parent;
@@ -107,8 +107,10 @@ public abstract class GrAbstractInplaceIntroducer<Settings extends GrIntroduceSe
return expression;
}
}
else {
else if (expression instanceof GrReferenceExpression){
return null;
} else {
break;
}
}
if (expression != null && expression.isValid() && expression.getText().equals(exprText)) {