protected void removeNodes(final List<? extends MyNode> nodes) {
    MyNode parentNode = null;
    int idx = -1;
    for (MyNode node : nodes) {
      final NamedConfigurable namedConfigurable = node.getConfigurable();
      final Object editableObject = namedConfigurable.getEditableObject();
      parentNode = (MyNode)node.getParent();
      if (parentNode == null) continue;
      idx = parentNode.getIndex(node);
      ((DefaultTreeModel)myTree.getModel()).removeNodeFromParent(node);
      myHasDeletedItems |= wasObjectStored(editableObject);
      fireItemsChangeListener(editableObject);
      onItemDeleted(editableObject);
      namedConfigurable.disposeUIResources();
    }

    if (!nodes.isEmpty()) {
      if (parentNode != null && idx != -1) {
        DefaultMutableTreeNode toSelect = null;
        if (idx < parentNode.getChildCount()) {
          toSelect = (DefaultMutableTreeNode) parentNode.getChildAt(idx);
        } else {
          if (idx > 0 && parentNode.getChildCount() > 0) {
            if (idx - 1 < parentNode.getChildCount()) {
              toSelect = (DefaultMutableTreeNode) parentNode.getChildAt(idx - 1);
            }
            else {
              toSelect = (DefaultMutableTreeNode) parentNode.getFirstChild();
            }
          }
          else {
            if (parentNode.isRoot() && myTree.isRootVisible()) {
              toSelect = parentNode;
            }
            else if (parentNode.getChildCount() > 0) {
              toSelect = (DefaultMutableTreeNode) parentNode.getFirstChild();
            }
          }
        }

        if (toSelect != null) {
          TreeUtil.selectInTree(toSelect, true, myTree);
        }
      }
      else {
        TreeUtil.promiseSelectFirst(myTree);
      }
    }
  }
protected void removeNodes(final List<? extends MyNode> nodes)