diff --git a/java/java-impl/src/com/intellij/refactoring/introduceParameter/AbstractJavaInplaceIntroducer.java b/java/java-impl/src/com/intellij/refactoring/introduceParameter/AbstractJavaInplaceIntroducer.java index 85d7a9d8d748..5e610f52e40f 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceParameter/AbstractJavaInplaceIntroducer.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceParameter/AbstractJavaInplaceIntroducer.java @@ -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)) { diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceParameter/chainMethodCall.java b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/chainMethodCall.java new file mode 100644 index 000000000000..4dfe8c31affb --- /dev/null +++ b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/chainMethodCall.java @@ -0,0 +1,23 @@ +class Test { + + private void test() { + TestSubject subject = new TestSubject(); + boolean flag = false; + + if (subject.getSubject2().getVal() != 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; + } + } +} diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceParameter/chainMethodCall_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/chainMethodCall_after.java new file mode 100644 index 000000000000..d4c5260001ee --- /dev/null +++ b/java/java-tests/testData/refactoring/inplaceIntroduceParameter/chainMethodCall_after.java @@ -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; + } + } +} diff --git a/java/java-tests/testSrc/com/intellij/refactoring/InplaceIntroduceParameterTest.java b/java/java-tests/testSrc/com/intellij/refactoring/InplaceIntroduceParameterTest.java index 841a67ea001d..d4bda12f1bb9 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/InplaceIntroduceParameterTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/InplaceIntroduceParameterTest.java @@ -41,6 +41,16 @@ public class InplaceIntroduceParameterTest extends AbstractJavaInplaceIntroduceT }); } + public void testChainMethodCall() throws Exception { + doTest(new Pass() { + @Override + public void pass(AbstractInplaceIntroducer inplaceIntroduceFieldPopup) { + inplaceIntroduceFieldPopup.setReplaceAllOccurrences(true); + } + }); + } + + public void testReplaceAll1() throws Exception { doTest(new Pass() { @Override diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduce/GrAbstractInplaceIntroducer.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduce/GrAbstractInplaceIntroducer.java index 1a81798fcf5a..759e95601608 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduce/GrAbstractInplaceIntroducer.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduce/GrAbstractInplaceIntroducer.java @@ -96,7 +96,7 @@ public abstract class GrAbstractInplaceIntroducer