[reflection] Coop handles icalls in System.Reflection and System.RuntimeTypeHandle...
[mono.git] / mcs / class / referencesource / System.Activities.Presentation / Microsoft.Tools.Common / Microsoft / Activities / Presentation / Xaml / XamlTypeWithExtraPropertiesRemoved.cs
1 //----------------------------------------------------------------
2 // <copyright company="Microsoft Corporation">
3 //     Copyright (c) Microsoft Corporation.  All rights reserved.
4 // </copyright>
5 //----------------------------------------------------------------
6
7 namespace Microsoft.Activities.Presentation.Xaml
8 {
9     using System;
10     using System.Collections.Generic;
11     using System.Linq;
12     using System.Xaml;
13
14     internal class XamlTypeWithExtraPropertiesRemoved : XamlType
15     {
16         private ICollection<string> propertiesToBeRemoved;
17
18         public XamlTypeWithExtraPropertiesRemoved(Type underlyingType, XamlSchemaContext schemaContext, ICollection<string> propertiesToBeRemoved)
19             : base(underlyingType, schemaContext)
20         {
21             this.propertiesToBeRemoved = propertiesToBeRemoved;
22         }
23
24         protected override XamlMember LookupMember(string name, bool skipReadOnlyCheck)
25         {
26             if (this.propertiesToBeRemoved.Contains(name))
27             {
28                 return null;
29             }
30
31             return base.LookupMember(name, skipReadOnlyCheck);
32         }
33
34         protected override IEnumerable<XamlMember> LookupAllMembers()
35         {
36             List<XamlMember> members = new List<XamlMember>();
37
38             foreach (XamlMember member in base.LookupAllMembers())
39             {
40                 if (!this.propertiesToBeRemoved.Contains(member.Name))
41                 {
42                     members.Add(member);
43                 }
44             }
45
46             return members;
47         }
48     }
49 }