78
91
static readonly IconId ProtectedProperty = "md-protected-property";
79
92
static readonly IconId ProtectedStruct = "md-protected-struct";
94
static readonly IconId ProtectedOrInternalClass = "md-ProtectedOrInternal-class";
95
static readonly IconId ProtectedOrInternalDelegate = "md-ProtectedOrInternal-delegate";
96
static readonly IconId ProtectedOrInternalEnum = "md-ProtectedOrInternal-enum";
97
static readonly IconId ProtectedOrInternalEvent = "md-ProtectedOrInternal-event";
98
static readonly IconId ProtectedOrInternalField = "md-ProtectedOrInternal-field";
99
static readonly IconId ProtectedOrInternalInterface = "md-ProtectedOrInternal-interface";
100
static readonly IconId ProtectedOrInternalMethod = "md-ProtectedOrInternal-method";
101
static readonly IconId ProtectedOrInternalExtensionMethod = "md-ProtectedOrInternal-extensionmethod";
102
static readonly IconId ProtectedOrInternalProperty = "md-ProtectedOrInternal-property";
103
static readonly IconId ProtectedOrInternalStruct = "md-ProtectedOrInternal-struct";
81
105
static IconId[,] typeIconTable = new IconId[,] {
82
{Class, PrivateClass, ProtectedClass, InternalClass}, // class
83
{Enum, PrivateEnum, ProtectedEnum, InternalEnum}, // enum
84
{Interface, PrivateInterface, ProtectedInterface, InternalInterface}, // interface
85
{Struct, PrivateStruct, ProtectedStruct, InternalStruct}, // struct
86
{Delegate, PrivateDelegate, ProtectedDelegate, InternalDelegate} // delegate
88
static readonly IconId[] fieldIconTable = {AstStockIcons.Field, AstStockIcons.PrivateField, AstStockIcons.ProtectedField, AstStockIcons.InternalField};
89
static readonly IconId[] methodIconTable = {AstStockIcons.Method, AstStockIcons.PrivateMethod, AstStockIcons.ProtectedMethod, AstStockIcons.InternalMethod};
90
static readonly IconId[] extensionMethodIconTable = {AstStockIcons.ExtensionMethod, AstStockIcons.PrivateExtensionMethod, AstStockIcons.ProtectedExtensionMethod, AstStockIcons.InternalExtensionMethod};
91
static readonly IconId[] propertyIconTable = {AstStockIcons.Property, AstStockIcons.PrivateProperty, AstStockIcons.ProtectedProperty, AstStockIcons.InternalProperty};
92
static readonly IconId[] eventIconTable = {AstStockIcons.Event, AstStockIcons.PrivateEvent, AstStockIcons.ProtectedEvent, AstStockIcons.InternalEvent};
94
static int ModifierToOffset (Accessibility acc)
96
if ((acc & Accessibility.Private) == Accessibility.Private)
98
if ((acc & Accessibility.Protected) == Accessibility.Protected)
100
if ((acc & Accessibility.Internal) == Accessibility.Internal)
105
public static string GetStockIcon (this EntityDeclaration element)
107
Accessibility acc = Accessibility.None;
108
// type accessibility
109
acc = Accessibility.Internal;
106
{Class, PrivateClass, Class, ProtectedClass, InternalClass, ProtectedOrInternalClass, InternalAndProtectedClass}, // class
107
{Enum, PrivateEnum, Enum, ProtectedEnum, InternalEnum, ProtectedOrInternalEnum, InternalAndProtectedEnum}, // enum
108
{Interface, PrivateInterface, Interface, ProtectedInterface, InternalInterface, ProtectedOrInternalInterface, InternalAndProtectedInterface}, // interface
109
{Struct, PrivateStruct, Struct, ProtectedStruct, InternalStruct, ProtectedOrInternalStruct, InternalAndProtectedStruct}, // struct
110
{Delegate, PrivateDelegate, Delegate, ProtectedDelegate, InternalDelegate, ProtectedOrInternalDelegate, InternalAndProtectedDelegate} // delegate
112
static readonly IconId[] fieldIconTable = {
113
AstStockIcons.Field, AstStockIcons.PrivateField, AstStockIcons.Field, AstStockIcons.ProtectedField, AstStockIcons.InternalField, AstStockIcons.ProtectedOrInternalField, AstStockIcons.InternalAndProtectedField
115
static readonly IconId[] methodIconTable = {
116
AstStockIcons.Method, AstStockIcons.PrivateMethod, AstStockIcons.Method, AstStockIcons.ProtectedMethod, AstStockIcons.InternalMethod, AstStockIcons.ProtectedOrInternalMethod, AstStockIcons.InternalAndProtectedMethod
118
static readonly IconId[] extensionMethodIconTable = {
119
AstStockIcons.ExtensionMethod, AstStockIcons.PrivateExtensionMethod, AstStockIcons.ExtensionMethod, AstStockIcons.ProtectedExtensionMethod, AstStockIcons.InternalExtensionMethod, AstStockIcons.ProtectedOrInternalExtensionMethod, AstStockIcons.InternalAndProtectedExtensionMethod
121
static readonly IconId[] propertyIconTable = {
122
AstStockIcons.Property, AstStockIcons.PrivateProperty, AstStockIcons.Property, AstStockIcons.ProtectedProperty, AstStockIcons.InternalProperty, AstStockIcons.ProtectedOrInternalProperty, AstStockIcons.InternalAndProtectedProperty
124
static readonly IconId[] eventIconTable = {
125
AstStockIcons.Event, AstStockIcons.PrivateEvent, AstStockIcons.Event, AstStockIcons.ProtectedEvent, AstStockIcons.InternalEvent, AstStockIcons.ProtectedOrInternalEvent, AstStockIcons.InternalAndProtectedEvent
128
static bool GetAccessibility (EntityDeclaration element, out Accessibility acc)
130
if (element.Parent is TypeDeclaration && ((TypeDeclaration)element.Parent).ClassType == ClassType.Interface) {
131
acc = Accessibility.Public;
135
acc = Accessibility.Private;
136
if (element is TypeDeclaration && !(element.Parent is TypeDeclaration))
137
acc = Accessibility.Internal;
110
138
if (element.HasModifier (Modifiers.Public)) {
111
139
acc = Accessibility.Public;
112
} else if (element.HasModifier (Modifiers.Protected)) {
113
acc = Accessibility.Protected;
114
141
} else if (element.HasModifier (Modifiers.Private)) {
115
142
acc = Accessibility.Private;
144
} else if (element.HasModifier (Modifiers.Protected | Modifiers.Internal)) {
145
acc = Accessibility.ProtectedOrInternal;
147
} else if (element.HasModifier (Modifiers.Protected)) {
148
acc = Accessibility.Protected;
150
} else if (element.HasModifier (Modifiers.Internal)) {
151
acc = Accessibility.Internal;
157
public static string GetStockIcon (this EntityDeclaration element, bool showAccessibility = true)
159
Accessibility acc = Accessibility.Public;
162
if (element is Accessor) {
163
if (showAccessibility) {
164
if (!GetAccessibility (element, out acc))
165
GetAccessibility (element.Parent as EntityDeclaration, out acc);
168
return methodIconTable [(int) (acc)];
171
if (showAccessibility) {
172
GetAccessibility (element, out acc);
118
175
if (element is TypeDeclaration) {
119
176
var type = element as TypeDeclaration;
120
177
switch (type.ClassType) {
121
178
case ClassType.Class:
122
return typeIconTable [0, ModifierToOffset (acc)];
179
return typeIconTable [0, (int) (acc)];
123
180
case ClassType.Struct:
124
return typeIconTable [3, ModifierToOffset (acc)];
181
return typeIconTable [3, (int) (acc)];
125
182
case ClassType.Interface:
126
return typeIconTable [2, ModifierToOffset (acc)];
183
return typeIconTable [2, (int) (acc)];
127
184
case ClassType.Enum:
128
return typeIconTable [1, ModifierToOffset (acc)];
185
return typeIconTable [1, (int) (acc)];
130
187
throw new ArgumentOutOfRangeException ();
133
190
if (element is DelegateDeclaration)
134
return typeIconTable [4, ModifierToOffset (acc)];
191
return typeIconTable [4, (int) (acc)];
136
193
// member accessibility
137
acc = Accessibility.Private;
138
if (element.HasModifier (Modifiers.Public)) {
139
acc = Accessibility.Public;
140
} else if (element.HasModifier (Modifiers.Protected)) {
141
acc = Accessibility.Protected;
142
} else if (element.HasModifier (Modifiers.Internal)) {
143
acc = Accessibility.Internal;
194
GetAccessibility (element, out acc);
146
196
if (element is MethodDeclaration) {
147
197
var method = element as MethodDeclaration;
148
198
if (method.IsExtensionMethod)
149
return extensionMethodIconTable [ModifierToOffset (acc)];
150
return methodIconTable [ModifierToOffset (acc)];
199
return extensionMethodIconTable [(int) (acc)];
200
return methodIconTable [(int) (acc)];
152
202
if (element is OperatorDeclaration || element is ConstructorDeclaration || element is DestructorDeclaration || element is Accessor)
153
return methodIconTable [ModifierToOffset (acc)];
203
return methodIconTable [(int) (acc)];
155
205
if (element is PropertyDeclaration)
156
return propertyIconTable [ModifierToOffset (acc)];
206
return propertyIconTable [(int) (acc)];
157
207
if (element is EventDeclaration || element is CustomEventDeclaration)
158
return eventIconTable [ModifierToOffset (acc)];
160
return fieldIconTable [ModifierToOffset (acc)];
208
return eventIconTable [(int) (acc)];
209
if (element.Parent is TypeDeclaration && ((TypeDeclaration)element.Parent).ClassType == ClassType.Enum)
210
acc = Accessibility.Public;
211
return fieldIconTable [(int) (acc)];