in src/Microsoft.VisualStudio.Composition/CompositionConfiguration.cs [468:530]
private static XDocument CreateDgml(ISet<ComposedPart> parts)
{
Requires.NotNull(parts, nameof(parts));
XElement nodes, links;
var dgml = Dgml.Create(out nodes, out links, direction: "RightToLeft")
.WithStyle(
"ExportFactory",
new Dictionary<string, string?>
{
{ "StrokeDashArray", "2,2" },
},
"Link")
.WithStyle(
"VsMEFBuiltIn",
new Dictionary<string, string?>
{
{ "Visibility", "Hidden" },
});
foreach (string? sharingBoundary in parts.Select(p => p.Definition.SharingBoundary).Distinct())
{
if (!string.IsNullOrEmpty(sharingBoundary))
{
nodes.Add(Dgml.Node(sharingBoundary, sharingBoundary, "Expanded"));
}
}
foreach (var part in parts)
{
var node = Dgml.Node(part.Definition.Id, ReflectionHelpers.GetTypeName(part.Definition.Type, false, true, null, null));
if (!string.IsNullOrEmpty(part.Definition.SharingBoundary))
{
node.ContainedBy(part.Definition.SharingBoundary!, dgml);
}
string[]? partDgmlCategories;
if (part.Definition.Metadata.TryGetValue(CompositionConstants.DgmlCategoryPartMetadataName, out partDgmlCategories))
{
node = node.WithCategories(partDgmlCategories);
}
nodes.Add(node);
foreach (var import in part.SatisfyingExports.Keys)
{
foreach (ExportDefinitionBinding export in part.SatisfyingExports[import])
{
string? linkLabel = !export.ExportedValueTypeRef.Equals(export.PartDefinition.TypeRef)
? export.ExportedValueType.ToString()
: null;
var link = Dgml.Link(export.PartDefinition.Id, part.Definition.Id, linkLabel);
if (import.IsExportFactory)
{
link = link.WithCategories("ExportFactory");
}
links.Add(link);
}
}
}
return dgml;
}