Program: 118189
Project: 118189
Buggy source:
@Override @SuppressWarnings("String_Node_Str") public void undo(){
  process.setActivate(false);
  for (  INode node : nodeList) {
    if (node.getJobletNode() != null) {
      continue;
    }
    NodeContainer nodeContainer=((Node)node).getNodeContainer();
    this.process.addUniqueNodeName(node.getUniqueName());
    ((Process)process).addNodeContainer(nodeContainer);
    List<Connection> inputList=(List<Connection>)node.getIncomingConnections();
    List<Connection> outputList=(List<Connection>)node.getOutgoingConnections();
    boolean builtIn=node.getConnectorFromType(EConnectionType.FLOW_MAIN).isMultiSchema() | node.getConnectorFromType(EConnectionType.TABLE).isMultiSchema();
    for (    Connection connection : inputList) {
      if (connection != null && connection.getSourceNodeConnector() != null) {
        connection.getSourceNodeConnector().setCurLinkNbOutput(connection.getSourceNodeConnector().getCurLinkNbOutput() + 1);
      }
      INode prevNode=connection.getSource();
      if ((prevNode instanceof Node) && ((Node)prevNode).getJobletNode() != null) {
        Node jobletnode=(Node)prevNode.getJobletNode();
        ((JobletContainer)jobletnode.getNodeContainer()).getOutputs().add(connection);
        restoreMetadata(connection,jobletnode);
      }
      if (!nodeList.contains(prevNode)) {
        if (!prevNode.getOutgoingConnections().contains(connection)) {
          prevNode.addOutput(connection);
        }
        restoreMetadata(connection,prevNode);
        connection.reconnect();
        connection.updateAllId();
        boolean builtInPrevNode=prevNode.getConnectorFromType(EConnectionType.FLOW_MAIN).isMultiSchema() | node.getConnectorFromType(EConnectionType.TABLE).isMultiSchema();
        if (connection.getLineStyle().hasConnectionCategory(IConnectionCategory.UNIQUE_NAME) && !builtInPrevNode) {
          String name=connection.getUniqueName();
          if (connection.getConnectorName().startsWith("String_Node_Str")) {
            if (process.checkValidConnectionName(name)) {
              process.addUniqueConnectionName(name);
            }
          }
 else {
            process.addUniqueConnectionName(name);
          }
        }
      }
    }
    for (    IConnection connection : outputList) {
      INode nextNode=connection.getTarget();
      if ((nextNode instanceof Node) && ((Node)nextNode).getJobletNode() != null) {
        Node jobletnode=(Node)nextNode.getJobletNode();
        ((JobletContainer)jobletnode.getNodeContainer()).getInputs().add(connection);
      }
      if (!nodeList.contains(nextNode)) {
        if (!nextNode.getIncomingConnections().contains(connection)) {
          nextNode.addInput(connection);
        }
        INodeConnector nodeConnector=nextNode.getConnectorFromType(connection.getLineStyle());
        nodeConnector.setCurLinkNbInput(nodeConnector.getCurLinkNbInput() + 1);
        connection.reconnect();
        if (nextNode.getExternalNode() instanceof AbstractNode) {
          ((AbstractNode)nextNode.getExternalNode()).addInput(connection);
        }
      }
      if (!builtIn) {
        if (connection.getLineStyle().hasConnectionCategory(IConnectionCategory.UNIQUE_NAME)) {
          String name=connection.getUniqueName();
          process.addUniqueConnectionName(name);
        }
      }
    }
    if (builtIn) {
      for (      IMetadataTable meta : node.getMetadataList()) {
        String metaName=meta.getTableName();
        process.addUniqueConnectionName(metaName);
      }
      for (      String name : joinTableNames) {
        process.addUniqueConnectionName(name);
      }
    }
  }
  process.setActivate(true);
  process.checkStartNodes();
  process.checkProcess();
}

Fixed version (ground truth):
@Override @SuppressWarnings("String_Node_Str") public void undo(){
  process.setActivate(false);
  for (  INode node : nodeList) {
    if (node.getJobletNode() != null) {
      continue;
    }
    NodeContainer nodeContainer=((Node)node).getNodeContainer();
    this.process.addUniqueNodeName(node.getUniqueName());
    ((Process)process).addNodeContainer(nodeContainer);
    List<Connection> inputList=(List<Connection>)node.getIncomingConnections();
    List<Connection> outputList=(List<Connection>)node.getOutgoingConnections();
    boolean builtIn=node.getConnectorFromType(EConnectionType.FLOW_MAIN).isMultiSchema() | node.getConnectorFromType(EConnectionType.TABLE).isMultiSchema();
    for (    Connection connection : inputList) {
      if (connection != null && connection.getSourceNodeConnector() != null) {
        connection.getSourceNodeConnector().setCurLinkNbOutput(connection.getSourceNodeConnector().getCurLinkNbOutput() + 1);
      }
      INode prevNode=connection.getSource();
      if ((prevNode instanceof Node) && ((Node)prevNode).getJobletNode() != null) {
        Node jobletnode=(Node)prevNode.getJobletNode();
        ((AbstractJobletContainer)jobletnode.getNodeContainer()).getOutputs().add(connection);
        restoreMetadata(connection,jobletnode);
      }
      if (!nodeList.contains(prevNode)) {
        if (!prevNode.getOutgoingConnections().contains(connection)) {
          prevNode.addOutput(connection);
        }
        restoreMetadata(connection,prevNode);
        connection.reconnect();
        connection.updateAllId();
        boolean builtInPrevNode=prevNode.getConnectorFromType(EConnectionType.FLOW_MAIN).isMultiSchema() | node.getConnectorFromType(EConnectionType.TABLE).isMultiSchema();
        if (connection.getLineStyle().hasConnectionCategory(IConnectionCategory.UNIQUE_NAME) && !builtInPrevNode) {
          String name=connection.getUniqueName();
          if (connection.getConnectorName().startsWith("String_Node_Str")) {
            if (process.checkValidConnectionName(name)) {
              process.addUniqueConnectionName(name);
            }
          }
 else {
            process.addUniqueConnectionName(name);
          }
        }
      }
    }
    for (    IConnection connection : outputList) {
      INode nextNode=connection.getTarget();
      if ((nextNode instanceof Node) && ((Node)nextNode).getJobletNode() != null) {
        Node jobletnode=(Node)nextNode.getJobletNode();
        ((AbstractJobletContainer)jobletnode.getNodeContainer()).getInputs().add(connection);
      }
      if (!nodeList.contains(nextNode)) {
        if (!nextNode.getIncomingConnections().contains(connection)) {
          nextNode.addInput(connection);
        }
        INodeConnector nodeConnector=nextNode.getConnectorFromType(connection.getLineStyle());
        nodeConnector.setCurLinkNbInput(nodeConnector.getCurLinkNbInput() + 1);
        connection.reconnect();
        if (nextNode.getExternalNode() instanceof AbstractNode) {
          ((AbstractNode)nextNode.getExternalNode()).addInput(connection);
        }
      }
      if (!builtIn) {
        if (connection.getLineStyle().hasConnectionCategory(IConnectionCategory.UNIQUE_NAME)) {
          String name=connection.getUniqueName();
          process.addUniqueConnectionName(name);
        }
      }
    }
    if (builtIn) {
      for (      IMetadataTable meta : node.getMetadataList()) {
        String metaName=meta.getTableName();
        process.addUniqueConnectionName(metaName);
      }
      for (      String name : joinTableNames) {
        process.addUniqueConnectionName(name);
      }
    }
  }
  process.setActivate(true);
  process.checkStartNodes();
  process.checkProcess();
}