From 5cf4dbd990b0efaadf964ee645fe14d1dd6366df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Pedro?= Date: Thu, 6 Dec 2018 16:55:11 +0000 Subject: [PATCH] Project system fixes for VS 2019. --- .../CompatMocks/ConfiguredProjectMock.cs | 17 +++++++++++++ .../ConfiguredProjectServicesMock.cs | 24 +++++++++++++++++++ .../Cosmos.VS.ProjectSystem.csproj | 1 + .../ProjectProperties.cs | 8 ++++++- .../VS/Debug/DebugLaunchProvider.cs | 15 +++++++----- .../VS/PlugsProjectTreeProvider.cs | 11 +++++---- 6 files changed, 65 insertions(+), 11 deletions(-) create mode 100644 source/Cosmos.VS.ProjectSystem/CompatMocks/ConfiguredProjectMock.cs create mode 100644 source/Cosmos.VS.ProjectSystem/CompatMocks/ConfiguredProjectServicesMock.cs diff --git a/source/Cosmos.VS.ProjectSystem/CompatMocks/ConfiguredProjectMock.cs b/source/Cosmos.VS.ProjectSystem/CompatMocks/ConfiguredProjectMock.cs new file mode 100644 index 000000000..95b601480 --- /dev/null +++ b/source/Cosmos.VS.ProjectSystem/CompatMocks/ConfiguredProjectMock.cs @@ -0,0 +1,17 @@ +using System.ComponentModel.Composition; +using Microsoft.VisualStudio.ProjectSystem; + +namespace Cosmos.VS.ProjectSystem.CompatMocks +{ + [Export] + internal sealed class ConfiguredProjectMock + { + [ImportingConstructor] + public ConfiguredProjectMock(ConfiguredProjectServicesMock configuredProjectServicesMock) + { + Services = configuredProjectServicesMock; + } + + public ConfiguredProjectServicesMock Services { get; } + } +} diff --git a/source/Cosmos.VS.ProjectSystem/CompatMocks/ConfiguredProjectServicesMock.cs b/source/Cosmos.VS.ProjectSystem/CompatMocks/ConfiguredProjectServicesMock.cs new file mode 100644 index 000000000..ff5c83518 --- /dev/null +++ b/source/Cosmos.VS.ProjectSystem/CompatMocks/ConfiguredProjectServicesMock.cs @@ -0,0 +1,24 @@ +using System.ComponentModel.Composition; +using Microsoft.VisualStudio.Composition; +using Microsoft.VisualStudio.ProjectSystem; +using Microsoft.VisualStudio.ProjectSystem.Properties; + +namespace Cosmos.VS.ProjectSystem.CompatMocks +{ + [Export] + internal sealed class ConfiguredProjectServicesMock + { + [ImportingConstructor] + public ConfiguredProjectServicesMock( + IAdditionalRuleDefinitionsService additionalRuleDefinitions, + IPropertyPagesCatalogProvider propertyPagesCatalog) + { + AdditionalRuleDefinitions = additionalRuleDefinitions; + PropertyPagesCatalog = propertyPagesCatalog; + } + + public IAdditionalRuleDefinitionsService AdditionalRuleDefinitions { get; } + + public IPropertyPagesCatalogProvider PropertyPagesCatalog { get; } + } +} diff --git a/source/Cosmos.VS.ProjectSystem/Cosmos.VS.ProjectSystem.csproj b/source/Cosmos.VS.ProjectSystem/Cosmos.VS.ProjectSystem.csproj index 642af86e5..40533633b 100644 --- a/source/Cosmos.VS.ProjectSystem/Cosmos.VS.ProjectSystem.csproj +++ b/source/Cosmos.VS.ProjectSystem/Cosmos.VS.ProjectSystem.csproj @@ -37,6 +37,7 @@ + diff --git a/source/Cosmos.VS.ProjectSystem/ProjectProperties.cs b/source/Cosmos.VS.ProjectSystem/ProjectProperties.cs index f6d383409..c1d2dc4f6 100644 --- a/source/Cosmos.VS.ProjectSystem/ProjectProperties.cs +++ b/source/Cosmos.VS.ProjectSystem/ProjectProperties.cs @@ -1,19 +1,25 @@ using System.Composition; +using Microsoft.VisualStudio.Composition; using Microsoft.VisualStudio.ProjectSystem; using Microsoft.VisualStudio.ProjectSystem.Properties; +using Cosmos.VS.ProjectSystem.CompatMocks; + namespace Cosmos.VS.ProjectSystem { [Export] internal partial class ProjectProperties : StronglyTypedPropertyAccess { + public new ConfiguredProjectMock ConfiguredProject { get; } + /// /// Initializes a new instance of the class. /// [ImportingConstructor] - public ProjectProperties(ConfiguredProject configuredProject) + public ProjectProperties(ConfiguredProject configuredProject, ConfiguredProjectMock configuredProjectMock) : base(configuredProject) { + ConfiguredProject = configuredProjectMock; } /// diff --git a/source/Cosmos.VS.ProjectSystem/ProjectSystem/VS/Debug/DebugLaunchProvider.cs b/source/Cosmos.VS.ProjectSystem/ProjectSystem/VS/Debug/DebugLaunchProvider.cs index ac99b7c24..59474dcbc 100644 --- a/source/Cosmos.VS.ProjectSystem/ProjectSystem/VS/Debug/DebugLaunchProvider.cs +++ b/source/Cosmos.VS.ProjectSystem/ProjectSystem/VS/Debug/DebugLaunchProvider.cs @@ -22,18 +22,23 @@ namespace Cosmos.VS.ProjectSystem.VS.Debug { private static readonly Guid CosmosDebugEngineGuid = new Guid("fa1da3a6-66ff-4c65-b077-e65f7164ef83"); - private ProjectProperties _projectProperties; - private IBootableProperties _bootableProperties; + private readonly ProjectProperties _projectProperties; + private readonly IBootableProperties _bootableProperties; + + private readonly IProjectLockService _projectLockService; [ImportingConstructor] public DebugLaunchProvider( ConfiguredProject configuredProject, ProjectProperties projectProperties, - IBootableProperties bootableProperties) + IBootableProperties bootableProperties, + IProjectLockService projectLockService) : base(configuredProject) { _projectProperties = projectProperties; _bootableProperties = bootableProperties; + + _projectLockService = projectLockService; } public override Task CanLaunchAsync(DebugLaunchOptions aLaunchOptions) => TplExtensions.TrueTask; @@ -110,9 +115,7 @@ namespace Cosmos.VS.ProjectSystem.VS.Debug private async Task GetPropertyAsync(string propertyName) { - var projectLockService = ConfiguredProject.UnconfiguredProject.ProjectService.Services.ProjectLockService; - - using (var projectReadLock = await projectLockService.ReadLockAsync()) + using (var projectReadLock = await _projectLockService.ReadLockAsync()) { var project = await projectReadLock.GetProjectAsync(ConfiguredProject); return project.GetPropertyValue(propertyName); diff --git a/source/Cosmos.VS.ProjectSystem/ProjectSystem/VS/PlugsProjectTreeProvider.cs b/source/Cosmos.VS.ProjectSystem/ProjectSystem/VS/PlugsProjectTreeProvider.cs index a329aab60..7a9186336 100644 --- a/source/Cosmos.VS.ProjectSystem/ProjectSystem/VS/PlugsProjectTreeProvider.cs +++ b/source/Cosmos.VS.ProjectSystem/ProjectSystem/VS/PlugsProjectTreeProvider.cs @@ -17,14 +17,18 @@ namespace Cosmos.VS.ProjectSystem.VS private static readonly ProjectTreeFlags PlugsProjectTreeFlags = ProjectTreeFlags.Create( ProjectTreeFlags.Common.BubbleUp | ProjectTreeFlags.Common.VirtualFolder); + private readonly IActiveConfiguredProjectSubscriptionService _activeConfiguredProjectSubscriptionService; + private IDisposable _itemsSubscriptionLink; [ImportingConstructor] protected PlugsProjectTreeProvider( IProjectThreadingService threadingService, - UnconfiguredProject unconfiguredProject) + UnconfiguredProject unconfiguredProject, + IActiveConfiguredProjectSubscriptionService activeConfiguredProjectSubscriptionService) : base(threadingService, unconfiguredProject) { + _activeConfiguredProjectSubscriptionService = activeConfiguredProjectSubscriptionService; } protected override void Initialize() @@ -37,8 +41,7 @@ namespace Cosmos.VS.ProjectSystem.VS return Task.FromResult(new TreeUpdateResult(CreatePlugsFolder(), true)); }); - var subscriptionService = UnconfiguredProject.Services.ActiveConfiguredProjectSubscription; - var itemsBlock = subscriptionService.ProjectCatalogSource.SourceBlock; + var itemsBlock = _activeConfiguredProjectSubscriptionService.ProjectCatalogSource.SourceBlock; var targetBlock = new ActionBlock>(ItemsChangedAsync); _itemsSubscriptionLink = itemsBlock.LinkTo( @@ -95,7 +98,7 @@ namespace Cosmos.VS.ProjectSystem.VS { var tree = oldTree.ClearChildren(); - foreach (var reference in snapshot.Project.Value.GetItems("PlugsReference")) + foreach (var reference in snapshot.Project.ProjectInstance.GetItems("PlugsReference")) { if (cancellationToken.IsCancellationRequested) {