Rubberduck.Parsing.VBA.RubberduckParser.SyncComReferences C# (CSharp) Method

SyncComReferences() private method

private SyncComReferences ( IReadOnlyList projects ) : void
projects IReadOnlyList
return void
        private void SyncComReferences(IReadOnlyList<VBProject> projects)
        {
            foreach (var vbProject in projects)
            {
                var projectId = QualifiedModuleName.GetProjectId(vbProject);
                for (var priority = 1; priority <= vbProject.References.Count; priority++)
                {
                    var reference = vbProject.References.Item(priority);
                    var referencedProjectId = QualifiedModuleName.GetProjectId(reference);
                    var map = _references.SingleOrDefault(r => r.ReferencedProjectId == referencedProjectId);
                    if (map == null)
                    {
                        map = new ReferencePriorityMap(referencedProjectId) {{projectId, priority}};
                        _references.Add(map);
                    }
                    else
                    {
                        map[projectId] = priority;
                    }

                    if (!map.IsLoaded)
                    {
                        _state.OnStatusMessageUpdate(ParserState.LoadingReference.ToString());
                        var items = _comReflector.GetDeclarationsForReference(reference).ToList();
                        foreach (var declaration in items)
                        {
                            _state.AddDeclaration(declaration);
                        }
                        map.IsLoaded = true;
                    }
                }
            }

            var mappedIds = _references.Select(map => map.ReferencedProjectId);
            var unmapped = projects.SelectMany(project => project.References.Cast<Reference>())
                .Where(reference => !mappedIds.Contains(QualifiedModuleName.GetProjectId(reference)));
            foreach (var reference in unmapped)
            {
                UnloadComReference(reference);
            }
        }