diff --git a/plugins/IntentionPowerPak/src/com/siyeh/ipp/concatenation/MakeCallChainIntoCallSequenceIntention.java b/plugins/IntentionPowerPak/src/com/siyeh/ipp/concatenation/MakeCallChainIntoCallSequenceIntention.java index 6637bb583634..5bd0395df727 100644 --- a/plugins/IntentionPowerPak/src/com/siyeh/ipp/concatenation/MakeCallChainIntoCallSequenceIntention.java +++ b/plugins/IntentionPowerPak/src/com/siyeh/ipp/concatenation/MakeCallChainIntoCallSequenceIntention.java @@ -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 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; diff --git a/plugins/IntentionPowerPak/src/com/siyeh/ipp/concatenation/MethodCallChainPredicate.java b/plugins/IntentionPowerPak/src/com/siyeh/ipp/concatenation/MethodCallChainPredicate.java index 6e4e1a0cb292..53f2afcbfac4 100644 --- a/plugins/IntentionPowerPak/src/com/siyeh/ipp/concatenation/MethodCallChainPredicate.java +++ b/plugins/IntentionPowerPak/src/com/siyeh/ipp/concatenation/MethodCallChainPredicate.java @@ -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)); } /** diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/concatenation/call_chain/BuilderInIf_after.java b/plugins/IntentionPowerPak/test/com/siyeh/ipp/concatenation/call_chain/BuilderInIf_after.java index ae0bdc0f337c..c422477b34db 100644 --- a/plugins/IntentionPowerPak/test/com/siyeh/ipp/concatenation/call_chain/BuilderInIf_after.java +++ b/plugins/IntentionPowerPak/test/com/siyeh/ipp/concatenation/call_chain/BuilderInIf_after.java @@ -6,7 +6,7 @@ class Test { if (b) { sb.append("foo"); sb.append("bar"); - s = sb.toString(); - } + s = sb.toString(); + } } } \ No newline at end of file