public void ToGraphViz(AstTypeDependencyGraph dep) { Graph.SetRankDir(DotRankDirection.LeftToRight); foreach (var astTypeDep in dep.Items) { var node = AddNode(astTypeDep.BaseItem); if (astTypeDep.BaseItem.IsValidStructureType) { var usedTypes = astTypeDep.UsedItems; foreach (var usedType in usedTypes) { AddEdge(usedType, astTypeDep.BaseItem); } } else { if (astTypeDep.UsedCount > 0) { node .AddEdgesFrom( astTypeDep.UsedItems.Select(t => t.GMacTypeSignature) ); } } } }
/// <summary> /// Construct a type dependency graph of all types under this AST /// </summary> /// <returns></returns> public AstTypeDependencyGraph GetTypeDependencies() { var dep = new AstTypeDependencyGraph(this); dep.Populate(); return(dep); }
public static DotGraph ToGraphViz(this AstTypeDependencyGraph depGraph) { var visitor = new AstTypesDependencyToGraphViz(); visitor.ToGraphViz(depGraph); return(visitor.Graph); }
public void Visit(AstType astType) { _dependencyGraph = astType.Root.GetTypeDependencies(); Graph.SetRankDir(DotRankDirection.LeftToRight); AddNode(astType) .SetFillColor(Color.GreenYellow.ToDotRgbColor()); _dict.Clear(); AddUserTypes(astType); _dict.Clear(); AddUsedTypes(astType); }
public GMacAstDescriptionVisitor(AstRoot root) { Root = root; _typeDepGraph = Root.GetTypeDependencies(); _macroDepGraph = Root.GetMacroDependencies(); }