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; } }
private static async Task AddImplementedSymbols(GraphBuilder graphBuilder, GraphNode node, IEnumerable<ISymbol> implementedSymbols) { foreach (var interfaceType in implementedSymbols) { var interfaceTypeNode = await graphBuilder.AddNodeForSymbolAsync(interfaceType, relatedNode: node).ConfigureAwait(false); graphBuilder.AddLink(node, CodeLinkCategories.Implements, interfaceTypeNode); } }
private static async Task AddImplementedSymbolsAsync(GraphBuilder graphBuilder, GraphNode node, IEnumerable <ISymbol> implementedSymbols) { foreach (var interfaceType in implementedSymbols) { var interfaceTypeNode = await graphBuilder.AddNodeForSymbolAsync(interfaceType, relatedNode : node).ConfigureAwait(false); graphBuilder.AddLink(node, CodeLinkCategories.Implements, interfaceTypeNode); } }
private static async Task AddImplementedSymbolsAsync( GraphBuilder graphBuilder, GraphNode node, ImmutableArray <ISymbol> implementedSymbols, CancellationToken cancellationToken) { foreach (var interfaceType in implementedSymbols) { var interfaceTypeNode = await graphBuilder.AddNodeAsync( interfaceType, relatedNode : node, cancellationToken).ConfigureAwait(false); graphBuilder.AddLink(node, CodeLinkCategories.Implements, interfaceTypeNode, cancellationToken); } }
private async Task <GraphNode> AddLinkedNodeForMemberAsync(Project project, ISymbol member, GraphBuilder graphBuilder) { Contract.ThrowIfNull(member.ContainingType); var trees = member.DeclaringSyntaxReferences.Select(d => d.SyntaxTree); var parentTypeNode = await AddLinkedNodeForType(project, member.ContainingType, graphBuilder, trees).ConfigureAwait(false); var memberNode = await graphBuilder.AddNodeForSymbolAsync(member, relatedNode : parentTypeNode).ConfigureAwait(false); graphBuilder.AddLink(parentTypeNode, GraphCommonSchema.Contains, memberNode); return(memberNode); }
private async Task<GraphNode> AddLinkedNodeForMemberAsync(Project project, ISymbol member, GraphBuilder graphBuilder) { Contract.ThrowIfNull(member.ContainingType); var trees = member.DeclaringSyntaxReferences.Select(d => d.SyntaxTree); var parentTypeNode = await AddLinkedNodeForType(project, member.ContainingType, graphBuilder, trees).ConfigureAwait(false); var memberNode = await graphBuilder.AddNodeForSymbolAsync(member, relatedNode: parentTypeNode).ConfigureAwait(false); graphBuilder.AddLink(parentTypeNode, GraphCommonSchema.Contains, memberNode); return memberNode; }