private static boolean tryStatementsAreEquivalent( @NotNull GrTryCatchStatement statement1, @NotNull GrTryCatchStatement statement2) { final GrOpenBlock tryBlock1 = statement1.getTryBlock(); final GrOpenBlock tryBlock2 = statement2.getTryBlock(); if (!openBlocksAreEquivalent(tryBlock1, tryBlock2)) { return false; } final GrFinallyClause finallyBlock1 = statement1.getFinallyClause(); final GrFinallyClause finallyBlock2 = statement2.getFinallyClause(); if (finallyBlock1 != null) { if (finallyBlock2 == null || !openBlocksAreEquivalent(finallyBlock1.getBody(), finallyBlock2.getBody())) { return false; } } else if (finallyBlock2 != null) { return false; } final GrCatchClause[] catchBlocks1 = statement1.getCatchClauses(); final GrCatchClause[] catchBlocks2 = statement2.getCatchClauses(); if (catchBlocks1.length != catchBlocks2.length) { return false; } for (int i = 0; i < catchBlocks2.length; i++) { if (!catchClausesAreEquivalent(catchBlocks1[i], catchBlocks2[i])) { return false; } } return true; }