blob: 63401a5a85bf8e1c2b01a6fdf445b639f45819a8 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
// Copyright (c) Microsoft Corporation. All rights reserved.
//
using System;
using System.Collections.Generic;
using System.Xml;
using System.Xml.XPath;
using System.Compiler;
namespace Microsoft.Ddue.Tools.Reflection {
public class RootFilter
{
#region Member Variables
private bool exposed;
private List < NamespaceFilter > namespaceFilters = new List < NamespaceFilter >();
#endregion
#region Constructors
public RootFilter(bool exposed) {
this.exposed = exposed;
}
public RootFilter(XmlReader configuration) {
exposed = Convert.ToBoolean(configuration.GetAttribute("expose"));
XmlReader subtree = configuration.ReadSubtree();
while (subtree.Read()) {
if ((subtree.NodeType == XmlNodeType.Element) && (subtree.Name == "namespace")) {
NamespaceFilter namespaceFilter = new NamespaceFilter(subtree);
namespaceFilters.Add(namespaceFilter);
}
}
subtree.Close();
}
#endregion
#region Public API
/// <summary>
/// Gets the exposed value from the config
/// </summary>
public bool ExposedFilterSetting
{
get
{
return exposed;
}
}
/// <summary>
/// Gets the number of namespace filters
/// </summary>
public int NamespaceFilterCount
{
get
{
return namespaceFilters.Count;
}
}
public List < NamespaceFilter > NamespaceFilters {
get {
return (namespaceFilters);
}
}
//Find out if any are exposed incase this class is not exposed
public bool HasExposedMembers(TypeNode type)
{
foreach (NamespaceFilter namespaceFilter in namespaceFilters)
{
bool? result = namespaceFilter.IsExposedType(type);
if (result != null)
{
return namespaceFilter.HasExposedMembers(type);
}
}
return false;
}
public bool IsExposedApi(Member api) {
Namespace space = api as Namespace;
if (space != null) return (IsExposedNamespace(space));
TypeNode type = api as TypeNode;
if (type != null) return (IsExposedType(type));
return (IsExposedMember(api));
}
public bool IsExposedMember(Member member) {
//Console.WriteLine("DEBUG: root.IsExposedMember");
foreach (NamespaceFilter namespaceFilter in namespaceFilters) {
bool? result = namespaceFilter.IsExposedMember(member);
if (result != null) return ((bool)result);
}
return (exposed);
}
public bool IsExposedNamespace(Namespace space) {
foreach (NamespaceFilter namespaceFilter in namespaceFilters) {
bool? result = namespaceFilter.IsExposedNamespace(space);
if (result != null) return ((bool)result);
}
return (exposed);
}
public bool IsExposedType(TypeNode type) {
foreach (NamespaceFilter namespaceFilter in namespaceFilters) {
bool? result = namespaceFilter.IsExposedType(type);
if (result != null) return ((bool)result);
}
return (exposed);
}
#endregion
}
}
|