private void areExitStatementsTheSame() throws ExitStatementsNotSameException { if (myExitStatements.isEmpty()) { throw new ExitStatementsNotSameException(); } PsiStatement first = null; for (PsiStatement statement : myExitStatements) { if (first == null) { first = statement; continue; } if (!PsiEquivalenceUtil.areElementsEquivalent(first, statement)) { throw new ExitStatementsNotSameException(); } } myFirstExitStatementCopy = (PsiStatement) first.copy(); }
public PsiStatement getExitStatementCopy( PsiElement returnStatement, final PsiElement[] elements) { PsiStatement exitStatementCopy = null; // replace all exit-statements such as break's or continue's with appropriate return for (PsiStatement exitStatement : myExitStatements) { if (exitStatement instanceof PsiReturnStatement) { if (!myGenerateConditionalExit) continue; } else if (exitStatement instanceof PsiBreakStatement) { PsiStatement statement = ((PsiBreakStatement) exitStatement).findExitedStatement(); if (statement == null) continue; int startOffset = myControlFlow.getStartOffset(statement); int endOffset = myControlFlow.getEndOffset(statement); if (myFlowStart <= startOffset && endOffset <= myFlowEnd) continue; } else if (exitStatement instanceof PsiContinueStatement) { PsiStatement statement = ((PsiContinueStatement) exitStatement).findContinuedStatement(); if (statement == null) continue; int startOffset = myControlFlow.getStartOffset(statement); int endOffset = myControlFlow.getEndOffset(statement); if (myFlowStart <= startOffset && endOffset <= myFlowEnd) continue; } else { LOG.error(String.valueOf(exitStatement)); continue; } int index = -1; for (int j = 0; j < elements.length; j++) { if (exitStatement.equals(elements[j])) { index = j; break; } } if (exitStatementCopy == null) { if (needExitStatement(exitStatement)) { exitStatementCopy = (PsiStatement) exitStatement.copy(); } } PsiElement result = exitStatement.replace(returnStatement); if (index >= 0) { elements[index] = result; } } return exitStatementCopy; }