main
cs 121 lines 3.57 KB
Raw
1 // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3 namespace WixToolset.Data
4 {
5 using System;
6
7 public enum AccessModifier
8 {
9 /// <summary>
10 /// Indicates the identifier is globally visible to all other sections.
11 /// </summary>
12 Global,
13 [Obsolete]
14 Public = Global,
15
16 /// <summary>
17 /// Indicates the identifier is visible only to sections in the same library.
18 /// </summary>
19 Library,
20 [Obsolete]
21 Internal = Library,
22
23 /// <summary>
24 /// Indicates the identifier is visible only to sections in the same source file.
25 /// </summary>
26 File,
27 [Obsolete]
28 Protected = File,
29
30 /// <summary>
31 /// Indicates the identifier is visible only to the section where it is defined.
32 /// </summary>
33 Section,
34 [Obsolete]
35 Private = Section,
36
37 /// <summary>
38 /// Indicates the identifier can be overridden by another symbol.
39 /// </summary>
40 Virtual,
41
42 /// <summary>
43 /// Indicates the identifier overrides a virtual symbol.
44 /// </summary>
45 Override,
46 }
47
48 /// <summary>
49 /// Extensions for converting <c>AccessModifier</c> to and from strings optimally.
50 /// </summary>
51 public static class AccessModifierExtensions
52 {
53 /// <summary>
54 /// Converts a string to an <c>AccessModifier</c>.
55 /// </summary>
56 /// <param name="access">String value to convert.</param>
57 /// <returns>Converted <c>AccessModifier</c>.</returns>
58 public static AccessModifier AsAccessModifier(this string access)
59 {
60 switch (access)
61 {
62 case "global":
63 case "public":
64 return AccessModifier.Global;
65
66 case "library":
67 case "internal":
68 return AccessModifier.Library;
69
70 case "file":
71 case "protected":
72 return AccessModifier.File;
73
74 case "section":
75 case "private":
76 return AccessModifier.Section;
77
78 case "virtual":
79 return AccessModifier.Virtual;
80
81 case "override":
82 return AccessModifier.Override;
83
84 default:
85 throw new ArgumentException($"Unknown AccessModifier: {access}", nameof(access));
86 }
87 }
88
89 /// <summary>
90 /// Converts an <c>AccessModifier</c> to a string.
91 /// </summary>
92 /// <param name="access"><c>AccessModifier</c> value to convert.</param>
93 /// <returns>Converted string.</returns>
94 public static string AsString(this AccessModifier access)
95 {
96 switch (access)
97 {
98 case AccessModifier.Global:
99 return "global";
100
101 case AccessModifier.Library:
102 return "library";
103
104 case AccessModifier.File:
105 return "file";
106
107 case AccessModifier.Section:
108 return "section";
109
110 case AccessModifier.Virtual:
111 return "virtual";
112
113 case AccessModifier.Override:
114 return "override";
115
116 default:
117 throw new ArgumentException($"Unknown AccessModifier: {access}", nameof(access));
118 }
119 }
120 }
121 }