/// <summary>
        /// Writes a list of <see cref="NodeId"/>.
        /// </summary>
        public static void WriteTextNodes(TextWriter writer, PipGraph pipGraph, IEnumerable <NodeId> nodes, bool printHashSourceFile = true)
        {
            Contract.Requires(writer != null);
            Contract.Requires(pipGraph != null);
            Contract.Requires(nodes != null);

            WriteTextList(
                writer,
                nodes,
                node =>
            {
                var pip = pipGraph.GetPipFromUInt32(node.Value);

                if (pip.PipType.IsMetaPip())
                {
                    return(null);
                }

                if (pip.PipType == PipType.HashSourceFile && !printHashSourceFile)
                {
                    return(null);
                }

                return(pip.PipType == PipType.HashSourceFile
                        ? ((HashSourceFile)pip).Artifact.Path.ToString(pipGraph.Context.PathTable)
                        : pip.GetDescription(pipGraph.Context));
            });
        }