[java-refactoring] isFirstUse: take PsiAssignmentExpression into account

Fixes IDEA-361852 Java Inline Method refactor introduces intermediate variables

GitOrigin-RevId: 680fbb62f3440b7ae29f4de1793260fe5be0ab36
This commit is contained in:
Tagir Valeev
2024-11-11 16:52:09 +00:00
committed by intellij-monorepo-bot
parent dae9c199ec
commit a762d39396
4 changed files with 39 additions and 2 deletions
@@ -553,8 +553,15 @@ public final class InlineUtil implements CommonJavaInlineUtil {
call instanceof PsiNewExpression newExpression ? newExpression.getQualifier() : null;
if (qualifier != null && !ExpressionUtils.isSafelyRecomputableExpression(qualifier)) return false;
cur = call;
}
else if (parent instanceof PsiReferenceExpression ref) {
} else if (parent instanceof PsiAssignmentExpression assign && assign.getRExpression() == cur) {
PsiExpression lExpression = assign.getLExpression();
if (lExpression instanceof PsiReferenceExpression lRef &&
(lRef.getQualifierExpression() == null || lRef.getQualifierExpression() instanceof PsiQualifiedExpression)) {
cur = assign;
} else {
return false;
}
} else if (parent instanceof PsiReferenceExpression ref) {
if (parent.getParent() instanceof PsiMethodCallExpression call) {
cur = call;
} else {
@@ -0,0 +1,17 @@
import java.util.List;
public class Foo {
public Foo hi() {
System.out.println("hi");
return this;
}
public Foo hiTwice() {
return hi().hi();
}
public static void main(String[] args) {
new Foo().hi().<caret>hiTwice().hi();
}
}
@@ -0,0 +1,11 @@
public class Foo {
public Foo hi() {
System.out.println("hi");
return this;
}
public static void main(String[] args) {
new Foo().hi().hi().hi().hi();
}
}
@@ -580,6 +580,8 @@ public class InlineMethodTest extends LightRefactoringTestCase {
public void testAndChainLambda() { doTest(); }
public void testAndChainLambdaSingleLine() { doTest(); }
public void testInlineDoubleCall() { doTest(); }
public void testTernaryBranch() { doTest(); }
public void testTernaryBranchCollapsible() { doTest(); }