private static void removeClose(Statement statement, boolean nullable) {
    if (nullable) {
      // Breaking out of parent, remove label
      // TODO: The underlying problem is that empty labeled basic blocks remove their label but the edge is marked as labeled and explicit.
      // label1: {
      //   ...
      //   break label1; // identifyLabels() removes this entirely but keeps the edge labeled
      // }
      //
      List<StatEdge> edges = statement.getAllSuccessorEdges();
      if (!edges.isEmpty() && edges.get(0).closure == statement.getParent()) {
        SequenceHelper.destroyAndFlattenStatement(statement);
      } else {
        for (StatEdge edge : statement.getFirst().getAllSuccessorEdges()) {
          edge.getDestination().removePredecessor(edge);
        }

        for (StatEdge edge : ((IfStatement)statement).getIfstat().getAllSuccessorEdges()) {
          edge.getDestination().removePredecessor(edge);

          if (edge.closure != null) {
            edge.closure.getLabelEdges().remove(edge);
          }
        }

        // Keep the label as it's not the parent
        statement.replaceWithEmpty();
      }
    } else {
      statement.getExprents().remove(0);
    }
  }
Processes try catch statements to turns them into try-with-resources statements wherever possible.
Including the entire classpath is generally needed for this to work as it needs to know which classes implement AutoCloseable.

@author ForgeFlower devs, SuperCoder79
src/org/jetbrains/java/decompiler/modules/decompiler/TryWithResourcesProcessor.java