boolean (PsiElement startElement, Predicate<? super Branch> shouldMergeWith) { PsiSwitchBlock switchBlock = PsiTreeUtil.getParentOfType(startElement, PsiSwitchBlock.class); if (switchBlock == null) return false; List<Branch> candidateBranches = null; for (List<Branch> branches : collectProbablySimilarBranches(switchBlock)) { myBranchToDelete = ContainerUtil.find(branches, branch -> branch.myStatements[0] == startElement); if (myBranchToDelete != null) { candidateBranches = branches; break; } } if (myBranchToDelete == null || candidateBranches == null) return false; for (Branch branch : candidateBranches) { if (shouldMergeWith.test(branch) && canBeJoined(myBranchToDelete, branch) != LevelType.NO) { myBranchToMergeWith = branch; break; } } if (myBranchToMergeWith == null) return false; myBranchPrefixToMove = myBranchToDelete.getBranchPrefix(); if (myBranchPrefixToMove.isEmpty()) return false; myLabelToMergeWith = PsiTreeUtil.getPrevSiblingOfType(myBranchToMergeWith.myStatements[0], PsiSwitchLabelStatement.class); if (myLabelToMergeWith == null) return false; myNextFromLabelToMergeWith = PsiTreeUtil.skipWhitespacesForward(myLabelToMergeWith); myCommentsToMergeWith = ContainerUtil.immutableSet(myBranchToMergeWith.myCommentTexts); return true; }