private void doRestoreNode(
      final RestorableStateNode treeNode, final XDebuggerTreeState.NodeInfo nodeInfo) {
    if (nodeInfo != null) {
      if (!checkExtendedModified(treeNode)
          && !(Comparing.equal(nodeInfo.getValue(), treeNode.getRawValue()))) {
        treeNode.markChanged();
      }
      if (!myStopRestoringSelection && nodeInfo.isSelected()) {
        try {
          myInsideRestoring = true;
          myTree.addSelectionPath(treeNode.getPath());
        } finally {
          myInsideRestoring = false;
        }
      }

      restoreChildren((XDebuggerTreeNode) treeNode, nodeInfo);
    } else if (!checkExtendedModified(treeNode)) {
      treeNode.markChanged();
    }
  }