private static void AppendReference(
            StringBuilder dot,
            MemoryPlace sourceNode,
            IReference reference,
            Dictionary <MemoryPlace, string> nodes,
            Dictionary <IReference, string> referenceNames)
        {
            if (referenceNames.TryGetValue(reference, out var borrowPointName))
            {
                // Start to Middle
                dot.Append($"    {nodes[sourceNode]} -> {borrowPointName} [dir=back,");
                AppendOwnership(dot, reference);
                dot.Append(",");
                AppendDeclaredAccess(dot, reference);
                dot.AppendLine("];");

                // Middle to End
                dot.Append($"    {borrowPointName} -> {nodes[reference.Referent]} [dir=forward,");
                if (reference.IsUsedForBorrow())
                {
                    var color = ColorForPhase(reference);
                    dot.Append($"color={color},style=dashed");
                }
                else
                {
                    AppendDeclaredAccess(dot, reference);
                }
                dot.Append(",");
                AppendEffectiveAccess(dot, reference);
                dot.AppendLine("];");
            }
            else
            {
                dot.Append($"    {nodes[sourceNode]} -> {nodes[reference.Referent]} [");
                AppendOwnership(dot, reference);
                dot.Append(",");
                AppendDeclaredAccess(dot, reference);
                dot.Append(",");
                AppendEffectiveAccess(dot, reference);
                dot.AppendLine("];");
            }
        }