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;
 }