in src/main/java/org/jetbrains/jetCheck/StructureNode.java [177:192]
StructureNode replace(NodeId id, StructureElement replacement) {
if (id == this.id) {
return (StructureNode)replacement;
}
if (children.isEmpty()) return this;
int index = indexOfChildContaining(id);
StructureElement oldChild = children.get(index);
StructureElement newChild = oldChild.replace(id, replacement);
if (oldChild == newChild) return this;
List<StructureElement> newChildren = new ArrayList<>(this.children);
newChildren.set(index, newChild);
return copyWithChildren(newChildren);
}