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("];"); } }