private async Task UpdateEntitiesFromSourceAsync(CancellationToken cancellationToken, IIncrementalProgress progress)
        {
            cancellationToken.ThrowIfCancellationRequested();

            var workspace = await _roslynModelProvider.GetWorkspaceAsync();

            var projects     = workspace.CurrentSolution.Projects;
            var compilations = (await projects.SelectAsync(async i => await i.GetCompilationAsync(cancellationToken))).ToArray();

            foreach (var roslynTypeNode in CurrentRoslynModel.RoslynNodes)
            {
                cancellationToken.ThrowIfCancellationRequested();

                var namedTypeSymbol    = roslynTypeNode.RoslynSymbol;
                var newVersionOfSymbol = FindSymbolInCompilations(namedTypeSymbol, compilations, cancellationToken);

                if (newVersionOfSymbol == null)
                {
                    RemoveNode(roslynTypeNode.Id);
                }
                else
                {
                    var updatedNode = roslynTypeNode.UpdateRoslynSymbol(newVersionOfSymbol);
                    UpdateNode(updatedNode);
                }

                progress?.Report(1);
            }
        }
Beispiel #2
0
        protected static async Task <IEnumerable <RelatedSymbolPair> > GetDerivedInterfacesAsync(IRoslynModelProvider roslynModelProvider, INamedTypeSymbol interfaceSymbol)
        {
            var workspace = await roslynModelProvider.GetWorkspaceAsync();

            var derivedInterfaces = await FindDerivedInterfacesAsync(workspace, interfaceSymbol);

            return(derivedInterfaces.Select(i => new RelatedSymbolPair(interfaceSymbol, i, DirectedRelationshipTypes.Subtype)));
        }
Beispiel #3
0
        protected static async Task <IEnumerable <RelatedSymbolPair> > GetDerivedTypesAsync(
            IRoslynModelProvider roslynModelProvider,
            INamedTypeSymbol classSymbol)
        {
            var workspace = await roslynModelProvider.GetWorkspaceAsync();

            var derivedClasses = await SymbolFinder.FindDerivedClassesAsync(classSymbol, workspace.CurrentSolution);

            return(derivedClasses
                   .Where(i => classSymbol.SymbolEquals(i.BaseType.OriginalDefinition) && i.TypeKind == TypeKind.Class)
                   .Select(i => new RelatedSymbolPair(classSymbol, i, DirectedRelationshipTypes.Subtype)));
        }