Remove excessive shortcut key matching in ToolStrip
[mono.git] / mcs / class / System.ComponentModel.Composition / src / ComponentModel / System / ComponentModel / Composition / Hosting / CatalogExportProvider.CatalogChangeProxy.cs
1 // -----------------------------------------------------------------------\r
2 // Copyright (c) Microsoft Corporation.  All rights reserved.\r
3 // -----------------------------------------------------------------------\r
4 using System;\r
5 using System.Collections.Generic;\r
6 using System.ComponentModel.Composition.Primitives;\r
7 using System.Diagnostics;\r
8 using System.Diagnostics.CodeAnalysis;\r
9 using System.Globalization;\r
10 using System.Linq;\r
11 using System.Runtime.CompilerServices;\r
12 using System.Threading;\r
13 using Microsoft.Internal;\r
14 using Microsoft.Internal.Collections;\r
15 \r
16 namespace System.ComponentModel.Composition.Hosting\r
17 {\r
18     public partial class CatalogExportProvider : ExportProvider, IDisposable\r
19     {\r
20         private class CatalogChangeProxy : ComposablePartCatalog\r
21         {\r
22             private ComposablePartCatalog _originalCatalog;\r
23             private List<ComposablePartDefinition> _addedParts;\r
24             private HashSet<ComposablePartDefinition> _removedParts;\r
25 \r
26             public CatalogChangeProxy(ComposablePartCatalog originalCatalog,\r
27                 IEnumerable<ComposablePartDefinition> addedParts,\r
28                 IEnumerable<ComposablePartDefinition> removedParts)\r
29             {\r
30                 this._originalCatalog = originalCatalog;\r
31                 this._addedParts = new List<ComposablePartDefinition>(addedParts);\r
32                 this._removedParts = new HashSet<ComposablePartDefinition>(removedParts);\r
33             }\r
34 \r
35             public override IQueryable<ComposablePartDefinition> Parts\r
36             {\r
37                 get\r
38                 {\r
39                     return this._originalCatalog.Parts.Concat(this._addedParts).Except(this._removedParts);\r
40                 }\r
41             }\r
42 \r
43             public override IEnumerable<Tuple<ComposablePartDefinition, ExportDefinition>> GetExports(\r
44                 ImportDefinition definition)\r
45             {\r
46                 Requires.NotNull(definition, "definition");\r
47 \r
48                 var originalExports = this._originalCatalog.GetExports(definition);\r
49                 var trimmedExports = originalExports.Where(partAndExport =>\r
50                     !this._removedParts.Contains(partAndExport.Item1));\r
51 \r
52                 var addedExports = new List<Tuple<ComposablePartDefinition, ExportDefinition>>();\r
53                 foreach (var part in this._addedParts)\r
54                 {\r
55                     foreach (var export in part.ExportDefinitions)\r
56                     {\r
57                         if (definition.IsConstraintSatisfiedBy(export))\r
58                         {\r
59                             addedExports.Add(new Tuple<ComposablePartDefinition, ExportDefinition>(part, export));\r
60                         }\r
61                     }\r
62                 }\r
63                 return trimmedExports.Concat(addedExports);\r
64             }\r
65         }\r
66     }\r
67 }\r