Skip to content

Commit f39b104

Browse files
committed
Remove duplicate code and optimize common case
These item lists are often empty. Optimize the common case here.
1 parent 698c90f commit f39b104

File tree

1 file changed

+21
-24
lines changed
  • src/Microsoft.VisualStudio.ProjectSystem.Managed/ProjectSystem/PackageRestore/Snapshots

1 file changed

+21
-24
lines changed

src/Microsoft.VisualStudio.ProjectSystem.Managed/ProjectSystem/PackageRestore/Snapshots/RestoreBuilder.cs

Lines changed: 21 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -18,41 +18,38 @@ internal static class RestoreBuilder
1818
public static ProjectRestoreInfo ToProjectRestoreInfo(IImmutableDictionary<string, IProjectRuleSnapshot> update)
1919
{
2020
IImmutableDictionary<string, string> properties = update.GetSnapshotOrEmpty(NuGetRestore.SchemaName).Properties;
21-
IProjectRuleSnapshot frameworkReferences = update.GetSnapshotOrEmpty(CollectedFrameworkReference.SchemaName);
22-
IProjectRuleSnapshot packageDownloads = update.GetSnapshotOrEmpty(CollectedPackageDownload.SchemaName);
23-
IProjectRuleSnapshot projectReferences = update.GetSnapshotOrEmpty(EvaluatedProjectReference.SchemaName);
24-
IProjectRuleSnapshot packageReferences = update.GetSnapshotOrEmpty(CollectedPackageReference.SchemaName);
25-
IProjectRuleSnapshot packageVersions = update.GetSnapshotOrEmpty(CollectedPackageVersion.SchemaName);
26-
IProjectRuleSnapshot nuGetAuditSuppress = update.GetSnapshotOrEmpty(CollectedNuGetAuditSuppressions.SchemaName);
27-
IProjectRuleSnapshot prunePackageReferences = update.GetSnapshotOrEmpty(CollectedPrunePackageReference.SchemaName);
28-
IProjectRuleSnapshot toolReferences = update.GetSnapshotOrEmpty(DotNetCliToolReference.SchemaName);
2921

3022
// For certain project types such as UWP, "TargetFrameworkMoniker" != the moniker that restore uses
3123
string targetMoniker = properties.GetPropertyOrEmpty(NuGetRestore.NuGetTargetMonikerProperty);
3224
if (targetMoniker.Length == 0)
3325
targetMoniker = properties.GetPropertyOrEmpty(NuGetRestore.TargetFrameworkMonikerProperty);
3426

35-
TargetFrameworkInfo frameworkInfo = new TargetFrameworkInfo(
27+
TargetFrameworkInfo frameworkInfo = new(
3628
targetMoniker,
37-
ToReferenceItems(frameworkReferences.Items),
38-
ToReferenceItems(packageDownloads.Items),
39-
ToReferenceItems(projectReferences.Items),
40-
ToReferenceItems(packageReferences.Items),
41-
ToReferenceItems(packageVersions.Items),
42-
ToReferenceItems(nuGetAuditSuppress.Items),
43-
ToReferenceItems(prunePackageReferences.Items),
44-
properties);
29+
frameworkReferences: GetReferenceItems(CollectedFrameworkReference.SchemaName),
30+
packageDownloads: GetReferenceItems(CollectedPackageDownload.SchemaName),
31+
projectReferences: GetReferenceItems(EvaluatedProjectReference.SchemaName),
32+
packageReferences: GetReferenceItems(CollectedPackageReference.SchemaName),
33+
centralPackageVersions: GetReferenceItems(CollectedPackageVersion.SchemaName),
34+
nuGetAuditSuppress: GetReferenceItems(CollectedNuGetAuditSuppressions.SchemaName),
35+
prunePackageReferences: GetReferenceItems(CollectedPrunePackageReference.SchemaName),
36+
properties: properties);
4537

4638
return new ProjectRestoreInfo(
47-
properties.GetPropertyOrEmpty(NuGetRestore.MSBuildProjectExtensionsPathProperty),
48-
properties.GetPropertyOrEmpty(NuGetRestore.ProjectAssetsFileProperty),
49-
properties.GetPropertyOrEmpty(NuGetRestore.TargetFrameworksProperty),
50-
EmptyTargetFrameworks.Add(frameworkInfo),
51-
ToReferenceItems(toolReferences.Items));
39+
msbuildProjectExtensionsPath: properties.GetPropertyOrEmpty(NuGetRestore.MSBuildProjectExtensionsPathProperty),
40+
projectAssetsFilePath: properties.GetPropertyOrEmpty(NuGetRestore.ProjectAssetsFileProperty),
41+
originalTargetFrameworks: properties.GetPropertyOrEmpty(NuGetRestore.TargetFrameworksProperty),
42+
targetFrameworks: [frameworkInfo],
43+
toolReferences: GetReferenceItems(DotNetCliToolReference.SchemaName));
5244

53-
static ImmutableArray<ReferenceItem> ToReferenceItems(IImmutableDictionary<string, IImmutableDictionary<string, string>> items)
45+
ImmutableArray<ReferenceItem> GetReferenceItems(string schemaName)
5446
{
55-
return items.ToImmutableArray(static (name, metadata) => new ReferenceItem(name, metadata));
47+
if (!update.TryGetValue(schemaName, out IProjectRuleSnapshot? result))
48+
{
49+
return [];
50+
}
51+
52+
return result.Items.ToImmutableArray(static (name, metadata) => new ReferenceItem(name, metadata));
5653
}
5754
}
5855
}

0 commit comments

Comments
 (0)