docs: @SuppressFBWarnings("ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD")
      public void execute() throws ClassNotFoundException {
          Set<Edge> deletedEdgeSet = new HashSet<>();
          List<MarkedEdge> markedEdgeList = new LinkedList<>();
  
          // Mark edges to delete,
          // mark edges to set properties of
          for (Iterator<Edge> i = cfg.edgeIterator(); i.hasNext();) {
              Edge edge = i.next();
              if (!edge.isExceptionEdge()) {
                  continue;
              }
  
              ExceptionSet exceptionSet = typeDataflow.getEdgeExceptionSet(edge);
              if (exceptionSet.isEmpty()) {
                  // No exceptions are actually thrown on this edge,
                  // so we can delete the edge.
                  deletedEdgeSet.add(edge);
              } else {
                  if (exceptionSet.isSingleton("java.lang.CloneNotSupportedException") && cfg.getMethodName().endsWith(".clone()")) {
                      String className = cfg.getMethodGen().getClassName();
                      if (Subtypes2.instanceOf(className, "java.lang.Cloneable")) {
                          deletedEdgeSet.add(edge);
                          continue;
                      }
                  }
                  // Some exceptions appear to be thrown on the edge.
                  // Mark to indicate if any of the exceptions are checked,
                  // and if any are explicit (checked or explicitly declared
                  // or thrown unchecked).
                  boolean someChecked = exceptionSet.containsCheckedExceptions();
                  boolean someExplicit = exceptionSet.containsExplicitExceptions();
  
                  int flags = 0;
                  if (someChecked) {
                      flags |= CHECKED_EXCEPTIONS_FLAG;
                  }
                  if (someExplicit) {
                      flags |= EXPLICIT_EXCEPTIONS_FLAG;
                  }
  
                  markedEdgeList.add(new MarkedEdge(edge, flags));
              }
          }
  
          // Remove deleted edges
          for (Edge edge : deletedEdgeSet) {
              cfg.removeEdge(edge);
              if (STATS) {
                  ++numEdgesPruned;
              }
              cfgModified = true;
          }
  
          // Mark edges
          for (MarkedEdge markedEdge : markedEdgeList) {
              markedEdge.apply();
          }
      }