diff --git a/source/Cosmos.Build.Tasks/.editorconfig b/source/Cosmos.Build.Tasks/.editorconfig new file mode 100644 index 000000000..930c4915a --- /dev/null +++ b/source/Cosmos.Build.Tasks/.editorconfig @@ -0,0 +1,2 @@ +[*] +indent_size = 4 diff --git a/source/Cosmos.Build.Tasks/build/Cosmos.Build.targets b/source/Cosmos.Build.Tasks/build/Cosmos.Build.targets index e5b054fa7..70171108d 100644 --- a/source/Cosmos.Build.Tasks/build/Cosmos.Build.targets +++ b/source/Cosmos.Build.Tasks/build/Cosmos.Build.targets @@ -1,132 +1,130 @@  - - $(AppData)\Cosmos User Kit - $(CosmosDir)\Kernel\ - + + $(AppData)\Cosmos User Kit + $(CosmosDir)\Kernel\ + - - $(OutputPath)$(AssemblyName).bin - $(OutputPath)$(AssemblyName).iso - + + $(OutputPath)$(AssemblyName).bin + $(OutputPath)$(AssemblyName).iso + - - $(MSBuildThisFileDirectory)..\tools\ + + $(MSBuildThisFileDirectory)..\tools\ - $(CosmosToolsPath)nasm\ - nasm.exe + $(CosmosToolsPath)nasm\ + nasm.exe - $(CosmosToolsPath)cygwin\ - ld.exe + $(CosmosToolsPath)cygwin\ + ld.exe - $(CosmosToolsPath)cygwin\ - objdump.exe + $(CosmosToolsPath)cygwin\ + objdump.exe - $(CosmosToolsPath)mkisofs\ - mkisofs.exe - + $(CosmosToolsPath)mkisofs\ + mkisofs.exe + - - $(OutputPath)$(AssemblyName).asm + + $(OutputPath)$(AssemblyName).asm - $(OutputPath)$(AssemblyName).obj - $(OutputPath)$(AssemblyName).bin - Bin + $(OutputPath)$(AssemblyName).obj + $(OutputPath)$(AssemblyName).bin + Bin - <_NasmMap>$([System.IO.Path]::GetDirectoryName('$(NasmOutput)'))\main.map + <_NasmMap>$([System.IO.Path]::GetDirectoryName('$(NasmOutput)'))\main.map - $(OutputPath)$(AssemblyName).map - $(OutputPath)$(AssemblyName).cdb + $(OutputPath)$(AssemblyName).map + $(OutputPath)$(AssemblyName).cdb - $(OutputPath)ISO\ - $(CosmosToolsPath)isolinux\ - + $(OutputPath)ISO\ + $(CosmosToolsPath)isolinux\ + - - $(CosmosToolsPath)Cosmos.Build.Tasks.dll - + + $(CosmosToolsPath)Cosmos.Build.Tasks.dll + - - - - - - + + + + + + - - - - - - - - + + + + + + + + - - - FailIfRelease; - TheRingMaster; - IL2CPU; - Nasm; - Ld; - ExtractMapFromElfFile; - ReadNasmMapToDebugInfo; - MakeIso - - + + + FailIfRelease; + TheRingMaster; + IL2CPU; + Nasm; + Ld; + ExtractMapFromElfFile; + ReadNasmMapToDebugInfo; + MakeIso + + - + - - - + + + - - + - - - + - - + - - - - + + + + - + - + - - + - + - + - - + - + - + - - + - + - + - - + - + - + - - + - - <_ISOLINUX Include="$(ISOLINUX)**" /> - + + <_ISOLINUX Include="$(ISOLINUX)**" /> + - + - + - + - + - + - - $(MSBuildExtensionsPath)\Cosmos\Cosmos.DesignTime.targets - + + $(MSBuildExtensionsPath)\Cosmos\Cosmos.DesignTime.targets + - + diff --git a/source/Cosmos.VS.ProjectSystem/Cosmos.VS.ProjectSystem.csproj b/source/Cosmos.VS.ProjectSystem/Cosmos.VS.ProjectSystem.csproj index 9172e4510..817dcc40e 100644 --- a/source/Cosmos.VS.ProjectSystem/Cosmos.VS.ProjectSystem.csproj +++ b/source/Cosmos.VS.ProjectSystem/Cosmos.VS.ProjectSystem.csproj @@ -65,14 +65,13 @@ - - + + - - + - + diff --git a/source/Cosmos.VS.ProjectSystem/ProjectSystem/VS/PlugsProjectTreeProvider.cs b/source/Cosmos.VS.ProjectSystem/ProjectSystem/VS/PlugsProjectTreeProvider.cs new file mode 100644 index 000000000..64d0ad803 --- /dev/null +++ b/source/Cosmos.VS.ProjectSystem/ProjectSystem/VS/PlugsProjectTreeProvider.cs @@ -0,0 +1,122 @@ +using System; +using System.ComponentModel.Composition; +using System.Threading; +using System.Threading.Tasks; +using System.Threading.Tasks.Dataflow; +using Microsoft.VisualStudio.Imaging; +using Microsoft.VisualStudio.ProjectSystem; +using Microsoft.VisualStudio.ProjectSystem.Properties; + +namespace Cosmos.VS.ProjectSystem.VS +{ + [Export(ExportContractNames.ProjectTreeProviders.PhysicalViewRootGraft, typeof(IProjectTreeProvider))] + [AppliesTo(ProjectCapability.Cosmos)] + internal class PlugsProjectTreeProvider : ProjectTreeProviderBase + { + private static readonly ProjectImageMoniker ReferenceIcon = KnownMonikers.Reference.ToProjectSystemType(); + private static readonly ProjectTreeFlags PlugsProjectTreeFlags = ProjectTreeFlags.Create( + ProjectTreeFlags.Common.BubbleUp | ProjectTreeFlags.Common.VirtualFolder); + + private IDisposable _itemsSubscriptionLink; + + [ImportingConstructor] + protected PlugsProjectTreeProvider( + IProjectThreadingService threadingService, + UnconfiguredProject unconfiguredProject) + : base(threadingService, unconfiguredProject) + { + } + + protected override void Initialize() + { + base.Initialize(); + + SubmitTreeUpdateAsync( + (treeSnapshot, configuredProjectExports, cancellationToken) => + { + return Task.FromResult(new TreeUpdateResult(CreatePlugsFolder(), true)); + }); + + var subscriptionService = UnconfiguredProject.Services.ActiveConfiguredProjectSubscription; + var itemsBlock = subscriptionService.ProjectCatalogSource.SourceBlock; + var targetBlock = new ActionBlock>(ItemsChangedAsync); + + _itemsSubscriptionLink = itemsBlock.LinkTo( + targetBlock, new DataflowLinkOptions() { PropagateCompletion = true }); + } + + protected override void Dispose(bool disposing) + { + if (disposing) + { + _itemsSubscriptionLink?.Dispose(); + } + + base.Dispose(disposing); + } + + protected override ConfiguredProjectExports GetActiveConfiguredProjectExports( + ConfiguredProject newActiveConfiguredProject) + { + return GetActiveConfiguredProjectExports(newActiveConfiguredProject); + } + + private IProjectTree CreatePlugsFolder() + { + var caption = "Plugs"; + var icon = KnownMonikers.Reference.ToProjectSystemType(); + var flags = PlugsProjectTreeFlags; + + return NewTree(caption, icon: ReferenceIcon, expandedIcon: ReferenceIcon, flags: PlugsProjectTreeFlags); + } + + private Task ItemsChangedAsync(IProjectVersionedValue snapshot) + { + SubmitTreeUpdateAsync( + (treeSnapshot, configuredProjectExports, cancellationToken) => + { + var dependenciesNode = treeSnapshot.Value.Tree; + + if (!cancellationToken.IsCancellationRequested) + { + dependenciesNode = BuildTree(dependenciesNode, snapshot.Value, cancellationToken); + } + + return Task.FromResult(new TreeUpdateResult(dependenciesNode, false)); + }); + + return Task.CompletedTask; + } + + private IProjectTree BuildTree( + IProjectTree oldTree, + IProjectCatalogSnapshot snapshot, + CancellationToken cancellationToken) + { + var tree = oldTree.ClearChildren(); + + foreach (var reference in snapshot.Project.Value.GetItems("PlugsReference")) + { + if (cancellationToken.IsCancellationRequested) + { + return oldTree; + } + + tree = tree.Add(NewTree(reference.GetMetadataValue("Filename"), + icon: ReferenceIcon, flags: ProjectTreeFlags.ResolvedReference)).Parent; + } + + return tree; + } + + [Export] + protected class MyConfiguredProjectExports : ConfiguredProjectExports + { + [ImportingConstructor] + protected MyConfiguredProjectExports(ConfiguredProject configuredProject) + : base(configuredProject) + { + } + } + } +}