1
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
2
// This code is distributed under MIT X11 license (for details please see \doc\license.txt)
5
using System.Collections.Generic;
8
namespace ICSharpCode.NRefactory.VB.Ast
11
/// Description of VBModifierToken.
13
public class VBModifierToken : VBTokenNode
17
public Modifiers Modifier {
18
get { return modifier; }
20
for (int i = 0; i < lengthTable.Count; i++) {
21
if (lengthTable[i].Key == value) {
22
this.modifier = value;
23
this.tokenLength = lengthTable[i].Value;
27
throw new ArgumentException ("Modifier " + value + " is invalid.");
31
protected internal override bool DoMatch(AstNode other, PatternMatching.Match match)
33
VBModifierToken o = other as VBModifierToken;
34
return o != null && this.modifier == o.modifier;
37
// Not worth using a dictionary for such few elements.
38
// This table is sorted in the order that modifiers should be output when generating code.
39
static readonly List<KeyValuePair<Modifiers, int>> lengthTable = new List<KeyValuePair<Modifiers, int>> () {
40
new KeyValuePair<Modifiers, int>(Modifiers.Public, "Public".Length),
41
new KeyValuePair<Modifiers, int>(Modifiers.Protected, "Protected".Length),
42
new KeyValuePair<Modifiers, int>(Modifiers.Private, "Private".Length),
43
new KeyValuePair<Modifiers, int>(Modifiers.Friend, "Friend".Length),
44
new KeyValuePair<Modifiers, int>(Modifiers.MustInherit, "MustInherit".Length),
45
new KeyValuePair<Modifiers, int>(Modifiers.MustOverride, "MustOverride".Length),
46
new KeyValuePair<Modifiers, int>(Modifiers.Overridable, "Overridable".Length),
47
new KeyValuePair<Modifiers, int>(Modifiers.NotInheritable, "NotInheritable".Length),
48
new KeyValuePair<Modifiers, int>(Modifiers.NotOverridable, "NotOverridable".Length),
49
new KeyValuePair<Modifiers, int>(Modifiers.Dim, "Dim".Length),
50
new KeyValuePair<Modifiers, int>(Modifiers.Const, "Const".Length),
51
new KeyValuePair<Modifiers, int>(Modifiers.Shared, "Shared".Length),
52
new KeyValuePair<Modifiers, int>(Modifiers.Static, "Static".Length),
53
new KeyValuePair<Modifiers, int>(Modifiers.Override, "Override".Length),
54
new KeyValuePair<Modifiers, int>(Modifiers.ReadOnly, "ReadOnly".Length),
55
new KeyValuePair<Modifiers, int>(Modifiers.WriteOnly, "WriteOnly".Length),
56
new KeyValuePair<Modifiers, int>(Modifiers.Shadows, "Shadows".Length),
57
new KeyValuePair<Modifiers, int>(Modifiers.Partial, "Partial".Length),
58
new KeyValuePair<Modifiers, int>(Modifiers.Overloads, "Overloads".Length),
59
new KeyValuePair<Modifiers, int>(Modifiers.WithEvents, "WithEvents".Length),
60
new KeyValuePair<Modifiers, int>(Modifiers.Default, "Default".Length),
61
// parameter modifiers
62
new KeyValuePair<Modifiers, int>(Modifiers.Optional, "Optional".Length),
63
new KeyValuePair<Modifiers, int>(Modifiers.ByVal, "ByVal".Length),
64
new KeyValuePair<Modifiers, int>(Modifiers.ByRef, "ByRef".Length),
65
new KeyValuePair<Modifiers, int>(Modifiers.ParamArray, "ParamArray".Length),
67
new KeyValuePair<Modifiers, int>(Modifiers.Narrowing, "Narrowing".Length),
68
new KeyValuePair<Modifiers, int>(Modifiers.Widening, "Widening".Length),
70
new KeyValuePair<Modifiers, int>(Modifiers.Async, "Async".Length),
71
new KeyValuePair<Modifiers, int>(Modifiers.Iterator, "Iterator".Length),
72
// even though it's used for patterns only, it needs to be in this table to be usable in the AST
73
new KeyValuePair<Modifiers, int>(Modifiers.Any, "Any".Length)
76
public static IEnumerable<Modifiers> AllModifiers {
77
get { return lengthTable.Select(p => p.Key); }
80
public VBModifierToken(TextLocation location, Modifiers modifier) : base (location, 0)
82
this.Modifier = modifier;
85
public static string GetModifierName(Modifiers modifier)
88
case Modifiers.Private:
90
case Modifiers.Friend:
92
case Modifiers.Protected:
94
case Modifiers.Public:
96
case Modifiers.MustInherit:
98
case Modifiers.MustOverride:
99
return "MustOverride";
100
case Modifiers.Overridable:
101
return "Overridable";
102
case Modifiers.NotInheritable:
103
return "NotInheritable";
104
case Modifiers.NotOverridable:
105
return "NotOverridable";
106
case Modifiers.Const:
108
case Modifiers.Shared:
110
case Modifiers.Static:
112
case Modifiers.Override:
114
case Modifiers.ReadOnly:
116
case Modifiers.Shadows:
118
case Modifiers.Partial:
120
case Modifiers.Overloads:
122
case Modifiers.WithEvents:
124
case Modifiers.Default:
128
case Modifiers.WriteOnly:
130
case Modifiers.Optional:
132
case Modifiers.ByVal:
134
case Modifiers.ByRef:
136
case Modifiers.ParamArray:
138
case Modifiers.Widening:
140
case Modifiers.Narrowing:
142
case Modifiers.Async:
144
case Modifiers.Iterator:
147
throw new NotSupportedException("Invalid value for Modifiers: " + modifier);