Skip to content

Commit dfdc9d7

Browse files
committed
Apply similar optimisation to ImportTreeProvider
This caches the configured value in the ImportTreeProvider, as recently done for the DependenciesTreeProvider.
1 parent c80c4cf commit dfdc9d7

File tree

1 file changed

+13
-11
lines changed

1 file changed

+13
-11
lines changed

src/Microsoft.VisualStudio.ProjectSystem.Managed/ProjectSystem/Tree/ProjectImports/ImportTreeProvider.cs

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ internal sealed class ImportTreeProvider : ProjectTreeProviderBase, IProjectTree
4545
private readonly UnconfiguredProject _project;
4646
private readonly IActiveConfiguredProjectSubscriptionService _projectSubscriptionService;
4747
private readonly IUnconfiguredProjectTasksService _unconfiguredProjectTasksService;
48+
private readonly IActiveConfiguredValue<IConfiguredProjectExports> _activeConfiguredProjectExports;
4849

4950
private DisposableBag? _subscriptions;
5051
private bool _showAllFiles;
@@ -54,12 +55,14 @@ internal ImportTreeProvider(
5455
IProjectThreadingService threadingService,
5556
UnconfiguredProject project,
5657
IActiveConfiguredProjectSubscriptionService projectSubscriptionService,
57-
IUnconfiguredProjectTasksService unconfiguredProjectTasksService)
58+
IUnconfiguredProjectTasksService unconfiguredProjectTasksService,
59+
IActiveConfiguredValue<IConfiguredProjectExports> activeConfiguredProjectExports)
5860
: base(threadingService, project, useDisplayOrdering: true)
5961
{
6062
_project = project;
6163
_projectSubscriptionService = projectSubscriptionService;
6264
_unconfiguredProjectTasksService = unconfiguredProjectTasksService;
65+
_activeConfiguredProjectExports = activeConfiguredProjectExports;
6366
}
6467

6568
public override string? GetPath(IProjectTree node)
@@ -346,9 +349,7 @@ void TearDownTree()
346349

347350
protected override ConfiguredProjectExports GetActiveConfiguredProjectExports(ConfiguredProject newActiveConfiguredProject)
348351
{
349-
Requires.NotNull(newActiveConfiguredProject);
350-
351-
return GetActiveConfiguredProjectExports<MyConfiguredProjectExports>(newActiveConfiguredProject);
352+
return (ConfiguredProjectExports)_activeConfiguredProjectExports.Value;
352353
}
353354

354355
protected override void Dispose(bool disposing)
@@ -361,13 +362,14 @@ protected override void Dispose(bool disposing)
361362
base.Dispose(disposing);
362363
}
363364

364-
[Export]
365-
private sealed class MyConfiguredProjectExports : ConfiguredProjectExports
365+
[Export(typeof(IConfiguredProjectExports))]
366+
[method: ImportingConstructor]
367+
private sealed class MyConfiguredProjectExports(ConfiguredProject configuredProject)
368+
: ConfiguredProjectExports(configuredProject),
369+
IConfiguredProjectExports
366370
{
367-
[ImportingConstructor]
368-
public MyConfiguredProjectExports(ConfiguredProject configuredProject)
369-
: base(configuredProject)
370-
{
371-
}
372371
}
372+
373+
// NOTE this interface is needed to work around accessiblity issues when making MyConfiguredProjectExports non-private
374+
internal interface IConfiguredProjectExports { }
373375
}

0 commit comments

Comments
 (0)