/// <summary> /// Registers the temporary rename. /// </summary> /// <param name="source">The renamed node.</param> protected void RegisterTemporaryRename(Node source) { TemporaryRenames.Add(source.Path, CurrentModel.Resolve(source.Path, true) as Node); var children = source.PropertyAccessors.Values .Where(pa => !pa.IsImmutable).Select(pa => pa.Getter.Invoke(source)); foreach (var child in children) { var childNode = child as Node; if (childNode != null) { if (!TemporaryRenames.ContainsKey(childNode.Path)) { var currentModelChildNode = CurrentModel.Resolve(childNode.Path) as Node; if (currentModelChildNode != null) { TemporaryRenames.Add(childNode.Path, currentModelChildNode); } } continue; } var childNodeCollection = child as NodeCollection; if (childNodeCollection != null) { foreach (Node node in childNodeCollection) { if (!TemporaryRenames.ContainsKey(node.Path)) { var currentModelChildNode = CurrentModel.Resolve(node.Path) as Node; if (currentModelChildNode != null) { TemporaryRenames.Add(node.Path, currentModelChildNode); } } } } } }