addChild method

TreeNode addChild(
  1. TreeNode node
)

Implementation

TreeNode addChild(TreeNode node) {
  if (_children.isNotEmpty && _children.values.first.isPlaceholder) {
    // 占位节点不能添加
    assert(false, "Place holder node must be only one");
  }

  if (_children.isNotEmpty && node.isPlaceholder) {
    // 占位节点不能添加
    assert(false, "Place holder node must be only one");
  }

  TreeNode finalNode;
  TreeNode? existsNode = _children[node.key];
  if (existsNode != null) {
    if (node.isEndNode && existsNode.isEndNode) {
      assert(false, "Multiple end pattern: /${existsNode._getPathToRoot().join("/")}");
    }
    if (node.isEndNode) {
      existsNode.setValue(node.value);
    }
    finalNode = existsNode;
  } else {
    _children[node.key] = node;
    finalNode = node;
  }
  finalNode._parent = this;
  return finalNode;
}