using System; using System.Collections.Generic; namespace ICSharpCode.NRefactory.CSharp { /// /// A specific role only used for C# tokens /// public sealed class TokenRole : Role { internal readonly static List Tokens = new List (); internal readonly static List TokenLengths = new List (); internal readonly uint TokenIndex; static TokenRole () { // null token Tokens.Add (""); TokenLengths.Add (0); } /// /// Gets the token as string. Note that the token Name and Token value may differ. /// public string Token { get; private set; } /// /// Gets the char length of the token. /// public int Length { get; private set; } public TokenRole(string token) : base (token, CSharpTokenNode.Null) { this.Token = token; this.Length = token.Length; bool found = false; for (int i = 0; i < Tokens.Count; i++) { var existingToken = Tokens [i]; if (existingToken == token) { TokenIndex = (uint)i; found = true; break; } } if (!found) { TokenIndex = (uint)Tokens.Count; Tokens.Add (token); TokenLengths.Add (this.Length); } } } }