提交 e19286c5 编写于 作者: S Sam Harwell

Use consistent calling convention for updates

上级 63612753
...@@ -23,10 +23,7 @@ internal ProjectDependencyGraph WithAdditionalProjectReferences(ProjectId projec ...@@ -23,10 +23,7 @@ internal ProjectDependencyGraph WithAdditionalProjectReferences(ProjectId projec
var newReferencesMap = ComputeNewReferencesMapForAdditionalProjectReferences(_referencesMap, projectId, referencedProjectIds); var newReferencesMap = ComputeNewReferencesMapForAdditionalProjectReferences(_referencesMap, projectId, referencedProjectIds);
var newReverseReferencesMap = var newReverseReferencesMap = ComputeNewReverseReferencesMapForAdditionalProjectReferences(_lazyReverseReferencesMap, projectId, referencedProjectIds);
_lazyReverseReferencesMap != null
? ComputeNewReverseReferencesMapForAdditionalProjectReferences(_lazyReverseReferencesMap, projectId, referencedProjectIds)
: null;
var newTransitiveReferencesMap = ComputeNewTransitiveReferencesMapForAdditionalProjectReferences(_transitiveReferencesMap, projectId, referencedProjectIds); var newTransitiveReferencesMap = ComputeNewTransitiveReferencesMapForAdditionalProjectReferences(_transitiveReferencesMap, projectId, referencedProjectIds);
...@@ -64,13 +61,15 @@ internal ProjectDependencyGraph WithAdditionalProjectReferences(ProjectId projec ...@@ -64,13 +61,15 @@ internal ProjectDependencyGraph WithAdditionalProjectReferences(ProjectId projec
/// <summary> /// <summary>
/// Computes a new <see cref="_lazyReverseReferencesMap"/> for the addition of additional project references. /// Computes a new <see cref="_lazyReverseReferencesMap"/> for the addition of additional project references.
/// Must be called on a non-null map.
/// </summary> /// </summary>
private static ImmutableDictionary<ProjectId, ImmutableHashSet<ProjectId>> ComputeNewReverseReferencesMapForAdditionalProjectReferences( private static ImmutableDictionary<ProjectId, ImmutableHashSet<ProjectId>>? ComputeNewReverseReferencesMapForAdditionalProjectReferences(
ImmutableDictionary<ProjectId, ImmutableHashSet<ProjectId>> existingReverseReferencesMap, ImmutableDictionary<ProjectId, ImmutableHashSet<ProjectId>>? existingReverseReferencesMap,
ProjectId projectId, ProjectId projectId,
IReadOnlyList<ProjectId> referencedProjectIds) IReadOnlyList<ProjectId> referencedProjectIds)
{ {
if (existingReverseReferencesMap is null)
return null;
var builder = existingReverseReferencesMap.ToBuilder(); var builder = existingReverseReferencesMap.ToBuilder();
foreach (var referencedProject in referencedProjectIds) foreach (var referencedProject in referencedProjectIds)
......
...@@ -23,12 +23,10 @@ internal ProjectDependencyGraph WithProjectRemoved(ProjectId projectId) ...@@ -23,12 +23,10 @@ internal ProjectDependencyGraph WithProjectRemoved(ProjectId projectId)
// The direct reverse references map is updated by removing the key for the project getting removed, and // The direct reverse references map is updated by removing the key for the project getting removed, and
// also updating any direct references to the removed project. // also updating any direct references to the removed project.
var reverseReferencesMap = _lazyReverseReferencesMap is object var reverseReferencesMap = ComputeNewReverseReferencesMapForRemovedProject(
? ComputeNewReverseReferencesMapForRemovedProject( existingForwardReferencesMap: _referencesMap,
existingForwardReferencesMap: _referencesMap, existingReverseReferencesMap: _lazyReverseReferencesMap,
existingReverseReferencesMap: _lazyReverseReferencesMap, projectId);
projectId)
: null;
var transitiveReferencesMap = ComputeNewTransitiveReferencesMapForRemovedProject(_transitiveReferencesMap, projectId); var transitiveReferencesMap = ComputeNewTransitiveReferencesMapForRemovedProject(_transitiveReferencesMap, projectId);
var reverseTransitiveReferencesMap = ComputeNewReverseTransitiveReferencesMapForRemovedProject(_reverseTransitiveReferencesMap, projectId); var reverseTransitiveReferencesMap = ComputeNewReverseTransitiveReferencesMapForRemovedProject(_reverseTransitiveReferencesMap, projectId);
return new ProjectDependencyGraph( return new ProjectDependencyGraph(
...@@ -84,11 +82,17 @@ internal ProjectDependencyGraph WithProjectRemoved(ProjectId projectId) ...@@ -84,11 +82,17 @@ internal ProjectDependencyGraph WithProjectRemoved(ProjectId projectId)
/// <summary> /// <summary>
/// Computes a new <see cref="_lazyReverseReferencesMap"/> for the removal of a project. /// Computes a new <see cref="_lazyReverseReferencesMap"/> for the removal of a project.
/// </summary> /// </summary>
private static ImmutableDictionary<ProjectId, ImmutableHashSet<ProjectId>> ComputeNewReverseReferencesMapForRemovedProject( private static ImmutableDictionary<ProjectId, ImmutableHashSet<ProjectId>>? ComputeNewReverseReferencesMapForRemovedProject(
ImmutableDictionary<ProjectId, ImmutableHashSet<ProjectId>> existingForwardReferencesMap, ImmutableDictionary<ProjectId, ImmutableHashSet<ProjectId>> existingForwardReferencesMap,
ImmutableDictionary<ProjectId, ImmutableHashSet<ProjectId>> existingReverseReferencesMap, ImmutableDictionary<ProjectId, ImmutableHashSet<ProjectId>>? existingReverseReferencesMap,
ProjectId projectId) ProjectId projectId)
{ {
if (existingReverseReferencesMap is null)
{
// The map was never calculated for the previous graph, so there is nothing to update.
return null;
}
var builder = existingReverseReferencesMap.ToBuilder(); var builder = existingReverseReferencesMap.ToBuilder();
// Iterate over each project referenced by 'projectId', which is now being removed. Update the reverse // Iterate over each project referenced by 'projectId', which is now being removed. Update the reverse
......
...@@ -20,9 +20,7 @@ internal ProjectDependencyGraph WithProjectReferenceRemoved(ProjectId projectId, ...@@ -20,9 +20,7 @@ internal ProjectDependencyGraph WithProjectReferenceRemoved(ProjectId projectId,
// Incrementally update the graph // Incrementally update the graph
var referencesMap = _referencesMap.SetItem(projectId, _referencesMap[projectId].Remove(referencedProjectId)); var referencesMap = _referencesMap.SetItem(projectId, _referencesMap[projectId].Remove(referencedProjectId));
var reverseReferencesMap = _lazyReverseReferencesMap is object var reverseReferencesMap = ComputeNewReverseReferencesMapForRemovedProjectReference(_lazyReverseReferencesMap, projectId, referencedProjectId);
? ComputeNewReverseReferencesMapForRemovedProjectReference(_lazyReverseReferencesMap, projectId, referencedProjectId)
: null;
var transitiveReferencesMap = ComputeNewTransitiveReferencesMapForRemovedProjectReference(_transitiveReferencesMap, projectId, referencedProjectId); var transitiveReferencesMap = ComputeNewTransitiveReferencesMapForRemovedProjectReference(_transitiveReferencesMap, projectId, referencedProjectId);
var reverseTransitiveReferencesMap = ComputeNewReverseTransitiveReferencesMapForRemovedProjectReference(_reverseTransitiveReferencesMap, projectId, referencedProjectId); var reverseTransitiveReferencesMap = ComputeNewReverseTransitiveReferencesMapForRemovedProjectReference(_reverseTransitiveReferencesMap, projectId, referencedProjectId);
...@@ -36,11 +34,14 @@ internal ProjectDependencyGraph WithProjectReferenceRemoved(ProjectId projectId, ...@@ -36,11 +34,14 @@ internal ProjectDependencyGraph WithProjectReferenceRemoved(ProjectId projectId,
dependencySets: default); dependencySets: default);
} }
private ImmutableDictionary<ProjectId, ImmutableHashSet<ProjectId>> ComputeNewReverseReferencesMapForRemovedProjectReference( private ImmutableDictionary<ProjectId, ImmutableHashSet<ProjectId>>? ComputeNewReverseReferencesMapForRemovedProjectReference(
ImmutableDictionary<ProjectId, ImmutableHashSet<ProjectId>> existingReverseReferencesMap, ImmutableDictionary<ProjectId, ImmutableHashSet<ProjectId>>? existingReverseReferencesMap,
ProjectId projectId, ProjectId projectId,
ProjectId referencedProjectId) ProjectId referencedProjectId)
{ {
if (existingReverseReferencesMap is null)
return null;
if (existingReverseReferencesMap.TryGetValue(referencedProjectId, out var referencingProjects)) if (existingReverseReferencesMap.TryGetValue(referencedProjectId, out var referencingProjects))
{ {
return existingReverseReferencesMap.SetItem(referencedProjectId, referencingProjects.Remove(projectId)); return existingReverseReferencesMap.SetItem(referencedProjectId, referencingProjects.Remove(projectId));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册