Program: 138120
Project: 138120
Buggy source:
@Override public void run(){
  ISelection selection=this.getSelection();
  Object[] deleteElements=((IStructuredSelection)selection).toArray();
  if (DQRepositoryNode.isOnFilterring() && deleteElements.length != 0) {
    if (deleteElements[0] instanceof RepositoryNode) {
      setPreviousFilteredNode((RepositoryNode)deleteElements[0]);
    }
    for (    Object obj : deleteElements) {
      if (obj instanceof RepositoryNode) {
        RepositoryNode node=(RepositoryNode)obj;
        RepositoryNodeHelper.removeChildrenNodesWhenFiltering(node);
      }
    }
  }
  List deleteNodes=null;
  List<IRepositoryNode> shownNodes=null;
  List<IRepositoryNode> findAllRecycleBinNodes=null;
  if (DQRepositoryNode.isOnFilterring()) {
    deleteNodes=new ArrayList();
    Collections.addAll(deleteNodes,deleteElements);
    shownNodes=RepositoryNodeHelper.findAllChildrenNodes(deleteNodes);
    List<IRepositoryNode> recycleBinNodeFirstLevelChildren=((RepositoryNode)RepositoryNodeHelper.getRecycleBinRepNode()).getChildren();
    findAllRecycleBinNodes=RepositoryNodeHelper.findAllChildrenNodes(recycleBinNodeFirstLevelChildren);
  }
  for (  Object obj : deleteElements) {
    if (obj instanceof RepositoryNode) {
      RepositoryNode node=(RepositoryNode)obj;
      if (node instanceof ReportFileRepNode) {
        deleteReportFile((ReportFileRepNode)node);
        continue;
      }
      boolean isStateDeleted=RepositoryNodeHelper.isStateDeleted(node);
      if (!isStateDeleted) {
        excuteSuperRun(null);
        break;
      }
      if (DQRepositoryNode.isOnFilterring() && isStateDeleted) {
        for (        IRepositoryNode iRepositoryNode : findAllRecycleBinNodes) {
          if (node.equals(iRepositoryNode)) {
            node=(RepositoryNode)iRepositoryNode;
            shownNodes=RepositoryNodeHelper.findAllChildrenNodes(deleteNodes);
            break;
          }
        }
        if (!RepositoryNodeHelper.isEmptyRecycleBin(findAllRecycleBinNodes,shownNodes)) {
          break;
        }
      }
      boolean hasDependency=false;
      if (node.getType() == ENodeType.SIMPLE_FOLDER || node.getType() == ENodeType.SYSTEM_FOLDER) {
        List<IRepositoryNode> newLs=RepositoryNodeHelper.getRepositoryElementFromFolder(node,true);
        boolean haveSubNode=false;
        for (        IRepositoryNode subNode : newLs) {
          hasDependency=RepositoryNodeHelper.hasDependencyClients(subNode);
          if (!hasDependency || hasDependency && handleDependencies(subNode)) {
            excuteSuperRun((RepositoryNode)subNode);
          }
 else {
            haveSubNode=true;
          }
        }
        if (!haveSubNode) {
          excuteSuperRun(node);
        }
      }
 else {
        hasDependency=RepositoryNodeHelper.hasDependencyClients(node);
        if (!hasDependency || hasDependency && handleDependencies(node)) {
          excuteSuperRun((RepositoryNode)node);
        }
      }
    }
  }
  if (DQRepositoryNode.isOnFilterring() && 0 != deleteElements.length) {
    RepositoryNodeHelper.regainRecycleBinFilteredNode();
  }
  CorePlugin.getDefault().refreshWorkSpace();
  CorePlugin.getDefault().refreshDQView(RepositoryNodeHelper.getRecycleBinRepNode());
}

Fixed version (ground truth):
@Override public void run(){
  ISelection selection=this.getSelection();
  Object[] deleteElements=((IStructuredSelection)selection).toArray();
  if (DQRepositoryNode.isOnFilterring() && deleteElements.length != 0) {
    if (deleteElements[0] instanceof RepositoryNode) {
      setPreviousFilteredNode((RepositoryNode)deleteElements[0]);
    }
    for (    Object obj : deleteElements) {
      if (obj instanceof RepositoryNode) {
        RepositoryNode node=(RepositoryNode)obj;
        RepositoryNodeHelper.removeChildrenNodesWhenFiltering(node);
      }
    }
  }
  List deleteNodes=null;
  List<IRepositoryNode> shownNodes=null;
  List<IRepositoryNode> findAllRecycleBinNodes=null;
  if (DQRepositoryNode.isOnFilterring()) {
    deleteNodes=new ArrayList();
    Collections.addAll(deleteNodes,deleteElements);
    shownNodes=RepositoryNodeHelper.findAllChildrenNodes(deleteNodes);
    List<IRepositoryNode> recycleBinNodeFirstLevelChildren=((RepositoryNode)RepositoryNodeHelper.getRecycleBinRepNode()).getChildren();
    findAllRecycleBinNodes=RepositoryNodeHelper.findAllChildrenNodes(recycleBinNodeFirstLevelChildren);
  }
  HashSet<RepositoryNode> deleteElementsParents=new HashSet<RepositoryNode>();
  for (  Object obj : deleteElements) {
    if (obj instanceof RepositoryNode) {
      RepositoryNode parent=((RepositoryNode)obj).getParent();
      deleteElementsParents.add(parent);
    }
  }
  for (  Object obj : deleteElements) {
    if (obj instanceof RepositoryNode) {
      RepositoryNode node=(RepositoryNode)obj;
      if (node instanceof ReportFileRepNode) {
        deleteReportFile((ReportFileRepNode)node);
        continue;
      }
      boolean isStateDeleted=RepositoryNodeHelper.isStateDeleted(node);
      if (!isStateDeleted) {
        excuteSuperRun(null);
        break;
      }
      if (DQRepositoryNode.isOnFilterring() && isStateDeleted) {
        for (        IRepositoryNode iRepositoryNode : findAllRecycleBinNodes) {
          if (node.equals(iRepositoryNode)) {
            node=(RepositoryNode)iRepositoryNode;
            shownNodes=RepositoryNodeHelper.findAllChildrenNodes(deleteNodes);
            break;
          }
        }
        if (!RepositoryNodeHelper.isEmptyRecycleBin(findAllRecycleBinNodes,shownNodes)) {
          break;
        }
      }
      boolean hasDependency=false;
      if (node.getType() == ENodeType.SIMPLE_FOLDER || node.getType() == ENodeType.SYSTEM_FOLDER) {
        List<IRepositoryNode> newLs=RepositoryNodeHelper.getRepositoryElementFromFolder(node,true);
        boolean haveSubNode=false;
        for (        IRepositoryNode subNode : newLs) {
          hasDependency=RepositoryNodeHelper.hasDependencyClients(subNode);
          if (!hasDependency || hasDependency && handleDependencies(subNode)) {
            excuteSuperRun((RepositoryNode)subNode);
          }
 else {
            haveSubNode=true;
          }
        }
        if (!haveSubNode) {
          excuteSuperRun(node);
        }
      }
 else {
        hasDependency=RepositoryNodeHelper.hasDependencyClients(node);
        if (!hasDependency || hasDependency && handleDependencies(node)) {
          excuteSuperRun((RepositoryNode)node);
        }
      }
    }
  }
  for (  RepositoryNode repositoryNode : deleteElementsParents) {
    CorePlugin.getDefault().refreshDQView(repositoryNode);
  }
  if (DQRepositoryNode.isOnFilterring() && 0 != deleteElements.length) {
    RepositoryNodeHelper.regainRecycleBinFilteredNode();
  }
  CorePlugin.getDefault().refreshWorkSpace();
  CorePlugin.getDefault().refreshDQView(RepositoryNodeHelper.getRecycleBinRepNode());
}