private async Task <GraphNode> AddLinkedNodeForType(Project project, INamedTypeSymbol namedType, GraphBuilder graphBuilder, IEnumerable <SyntaxTree> syntaxTrees) { // If this named type is contained in a parent type, then just link farther up if (namedType.ContainingType != null) { var parentTypeNode = await AddLinkedNodeForType(project, namedType.ContainingType, graphBuilder, syntaxTrees).ConfigureAwait(false); var typeNode = await graphBuilder.AddNodeForSymbolAsync(namedType, relatedNode : parentTypeNode).ConfigureAwait(false); graphBuilder.AddLink(parentTypeNode, GraphCommonSchema.Contains, typeNode); return(typeNode); } else { // From here, we can link back up to the containing project item var typeNode = await graphBuilder.AddNodeForSymbolAsync(namedType, contextProject : project, contextDocument : null).ConfigureAwait(false); foreach (var tree in syntaxTrees) { var document = project.Solution.GetDocument(tree); Contract.ThrowIfNull(document); var documentNode = graphBuilder.AddNodeForDocument(document); graphBuilder.AddLink(documentNode, GraphCommonSchema.Contains, typeNode); } return(typeNode); } }
private async Task<GraphNode> AddLinkedNodeForType(Project project, INamedTypeSymbol namedType, GraphBuilder graphBuilder, IEnumerable<SyntaxTree> syntaxTrees) { // If this named type is contained in a parent type, then just link farther up if (namedType.ContainingType != null) { var parentTypeNode = await AddLinkedNodeForType(project, namedType.ContainingType, graphBuilder, syntaxTrees).ConfigureAwait(false); var typeNode = await graphBuilder.AddNodeForSymbolAsync(namedType, relatedNode: parentTypeNode).ConfigureAwait(false); graphBuilder.AddLink(parentTypeNode, GraphCommonSchema.Contains, typeNode); return typeNode; } else { // From here, we can link back up to the containing project item var typeNode = await graphBuilder.AddNodeForSymbolAsync(namedType, contextProject: project, contextDocument: null).ConfigureAwait(false); foreach (var tree in syntaxTrees) { var document = project.Solution.GetDocument(tree); Contract.ThrowIfNull(document); var documentNode = graphBuilder.AddNodeForDocument(document); graphBuilder.AddLink(documentNode, GraphCommonSchema.Contains, typeNode); } return typeNode; } }