IDEA-235296 Refactor ensureCodeBlock: MakeCallChainIntoCallSequenceIntention updated

GitOrigin-RevId: e6c99b39100647404df6970d76c49f03cf0a0b1e
This commit is contained in:
Tagir Valeev
2020-03-17 20:53:55 +00:00
committed by intellij-monorepo-bot
parent 5f1fe98ff8
commit 1dea41a567
3 changed files with 12 additions and 27 deletions
@@ -24,10 +24,7 @@ import com.intellij.psi.search.searches.ReferencesSearch;
import com.intellij.psi.util.PsiUtil;
import com.intellij.refactoring.util.RefactoringUtil;
import com.intellij.util.ObjectUtils;
import com.siyeh.ig.psiutils.CommentTracker;
import com.siyeh.ig.psiutils.HighlightUtils;
import com.siyeh.ig.psiutils.MethodCallUtils;
import com.siyeh.ig.psiutils.VariableNameGenerator;
import com.siyeh.ig.psiutils.*;
import com.siyeh.ipp.base.Intention;
import com.siyeh.ipp.base.PsiElementPredicate;
import org.jetbrains.annotations.Contract;
@@ -53,10 +50,11 @@ public class MakeCallChainIntoCallSequenceIntention extends Intention {
final List<String> callTexts = new ArrayList<>();
PsiMethodCallExpression call = ObjectUtils.tryCast(element, PsiMethodCallExpression.class);
if (call == null) return;
call = RefactoringUtil.ensureCodeBlock(call);
if (call == null) return;
final PsiStatement appendStatement = ObjectUtils.tryCast(RefactoringUtil.getParentStatement(call, false), PsiStatement.class);
if (appendStatement == null) return;
CodeBlockSurrounder surrounder = CodeBlockSurrounder.forExpression(call);
if (surrounder == null) return;
CodeBlockSurrounder.SurroundResult result = surrounder.surround();
call = (PsiMethodCallExpression)result.getExpression();
final PsiStatement appendStatement = result.getAnchor();
PsiExpression toReplace = call;
PsiExpression root = MethodCallChainPredicate.getCallChainRoot(call);
if (root == null) return;
@@ -18,6 +18,7 @@ package com.siyeh.ipp.concatenation;
import com.intellij.psi.*;
import com.intellij.psi.util.InheritanceUtil;
import com.intellij.psi.util.PsiUtil;
import com.siyeh.ig.psiutils.CodeBlockSurrounder;
import com.siyeh.ipp.base.PsiElementPredicate;
import org.jetbrains.annotations.Nullable;
@@ -29,23 +30,9 @@ class MethodCallChainPredicate implements PsiElementPredicate {
return false;
}
final PsiElement parent = PsiUtil.skipParenthesizedExprUp(element.getParent());
if (parent instanceof PsiExpressionStatement || parent instanceof PsiField || parent instanceof PsiReturnStatement
|| parent instanceof PsiLambdaExpression || parent instanceof PsiBreakStatement) {
return true;
}
if (parent instanceof PsiLocalVariable) {
final PsiElement grandParent = parent.getParent();
if (!(grandParent instanceof PsiDeclarationStatement)) {
return false;
}
final PsiDeclarationStatement declarationStatement = (PsiDeclarationStatement)grandParent;
return declarationStatement.getDeclaredElements().length == 1;
}
if (parent instanceof PsiAssignmentExpression) {
final PsiElement grandParent = parent.getParent();
return grandParent instanceof PsiExpressionStatement;
}
return false;
return (parent instanceof PsiStatement || parent instanceof PsiVariable ||
parent instanceof PsiAssignmentExpression || parent instanceof PsiLambdaExpression) &&
(element instanceof PsiExpression && CodeBlockSurrounder.canSurround((PsiExpression)element));
}
/**
@@ -6,7 +6,7 @@ class Test {
if (b) {
sb.append("foo");
sb.append("bar");
s = sb.toString();
}<caret>
s = sb<caret>.toString();
}
}
}