/// <summary> /// Extract the class name. /// </summary> private static ExtractedClassName Extract(CSharpTokenizer tokens) { var state = new ParseState(); var result = new ExtractedClassName(); foreach (Token t in tokens) { // Search first for the namespace keyword if (t is KeywordToken) { state.Reset(); if (t.InnerText == "namespace") { state.ResolvingNamespace = true; if (state.InsideConditionalDirective) { result.IsInsideConditionalBlock = true; } } else if (t.InnerText == "class") { state.ResolvingClass = true; if (state.InsideConditionalDirective) { result.IsInsideConditionalBlock = true; } } } else if (t is CSharpTokenizer.OpenScopeToken) { state.PushNamespacePart(state.Namespace); state.Reset(); } else if (t is CSharpTokenizer.CloseScopeToken) { state.Reset(); state.PopNamespacePart(); } else if (t is OperatorOrPunctuatorToken) { if (state.ResolvingNamespace) { if (t.InnerText == ".") { state.Namespace += "."; } } } else if (t is IdentifierToken) { // If we're resolving a namespace, then this is part of the namespace. if (state.ResolvingNamespace) { state.Namespace += t.InnerText; } // If we're resolving a class, then we're done. We found the class name. else if (state.ResolvingClass) { // We're done. result.Name = state.ComposeQualifiedClassName(t.InnerText); return(result); } } else if (t is OpenConditionalDirectiveToken) { state.OpenConditionalDirective(); } else if (t is CloseConditionalDirectiveToken) { state.CloseConditionalDirective(); } } return(result); }
/// <summary> /// Extract the class name. /// </summary> private static ExtractedClassName Extract(CSharpTokenizer tokens) { var state = new ParseState(); var result = new ExtractedClassName(); foreach (Token t in tokens) { // Search first for the namespace keyword if (t is KeywordToken) { state.Reset(); if (t.InnerText == "namespace") { state.ResolvingNamespace = true; if (state.InsideConditionalDirective) { result.IsInsideConditionalBlock = true; } } else if (t.InnerText == "class") { state.ResolvingClass = true; if (state.InsideConditionalDirective) { result.IsInsideConditionalBlock = true; } } } else if (t is CSharpTokenizer.OpenScopeToken) { state.PushNamespacePart(state.Namespace); state.Reset(); } else if (t is CSharpTokenizer.CloseScopeToken) { state.Reset(); state.PopNamespacePart(); } else if (t is OperatorOrPunctuatorToken) { if (state.ResolvingNamespace) { // If we see a ';' while resolving a namespace, we assume it's a file-scoped namespace // namespace foo.bar; <- At this point in code, we're at the semicolon. // class test { ... } // https://github.com/dotnet/csharplang/blob/088f20b6f9b714a7b68f6d792d54def0f3b3057e/proposals/csharp-10.0/file-scoped-namespaces.md if (t.InnerText == ";") { state.PushNamespacePart(state.Namespace); state.Reset(); } else if (t.InnerText == ".") { state.Namespace += "."; } } } else if (t is IdentifierToken) { // If we're resolving a namespace, then this is part of the namespace. if (state.ResolvingNamespace) { state.Namespace += t.InnerText; } // If we're resolving a class, then we're done. We found the class name. else if (state.ResolvingClass) { // We're done. result.Name = state.ComposeQualifiedClassName(t.InnerText); return(result); } } else if (t is OpenConditionalDirectiveToken) { state.OpenConditionalDirective(); } else if (t is CloseConditionalDirectiveToken) { state.CloseConditionalDirective(); } } return(result); }
private static ExtractedClassName Extract(CSharpTokenizer tokens) { ParseState state = new ParseState(); ExtractedClassName name = new ExtractedClassName(); foreach (Token token in tokens) { if (token is KeywordToken) { state.Reset(); if (token.InnerText == "namespace") { state.ResolvingNamespace = true; if (state.InsideConditionalDirective) { name.IsInsideConditionalBlock = true; } } else if (token.InnerText == "class") { state.ResolvingClass = true; if (state.InsideConditionalDirective) { name.IsInsideConditionalBlock = true; } } } else if (token is CSharpTokenizer.OpenScopeToken) { state.PushNamespacePart(state.Namespace); state.Reset(); } else if (token is CSharpTokenizer.CloseScopeToken) { state.Reset(); state.PopNamespacePart(); } else if (token is OperatorOrPunctuatorToken) { if (state.ResolvingNamespace && (token.InnerText == ".")) { state.Namespace = state.Namespace + "."; } } else if (token is IdentifierToken) { if (!state.ResolvingNamespace) { if (state.ResolvingClass) { name.Name = state.ComposeQualifiedClassName(token.InnerText); return(name); } } else { state.Namespace = state.Namespace + token.InnerText; } } else if (token is OpenConditionalDirectiveToken) { state.OpenConditionalDirective(); } else if (token is CloseConditionalDirectiveToken) { state.CloseConditionalDirective(); } } return(name); }
private static ExtractedClassName Extract(VisualBasicTokenizer tokens) { var state = new ParseState(); var result = new ExtractedClassName(); foreach (Token t in tokens) { // Search first for keywords that we care about. if (t is KeywordToken) { state.Reset(); if (t.EqualsIgnoreCase("namespace")) { state.ResolvingNamespace = true; if (state.InsideConditionalDirective) { result.IsInsideConditionalBlock = true; } } else if (t.EqualsIgnoreCase("class")) { state.ResolvingClass = true; if (state.InsideConditionalDirective) { result.IsInsideConditionalBlock = true; } } else if (t.EqualsIgnoreCase("end")) { state.PopNamespacePart(); } } else if (t is VisualBasicTokenizer.LineTerminatorToken) { if (state.ResolvingNamespace) { state.PushNamespacePart(state.Namespace); } state.Reset(); } else if (t is VisualBasicTokenizer.SeparatorToken) { if (state.ResolvingNamespace) { if (t.InnerText == ".") { state.Namespace += "."; } } } else if (t is IdentifierToken) { // If we're resolving a namespace, then this is part of the namespace. if (state.ResolvingNamespace) { state.Namespace += t.InnerText; } // If we're resolving a class, then we're done. We found the class name. else if (state.ResolvingClass) { // We're done. result.Name = state.ComposeQualifiedClassName(t.InnerText); return(result); } } else if (t is OpenConditionalDirectiveToken) { state.OpenConditionalDirective(); } else if (t is CloseConditionalDirectiveToken) { state.CloseConditionalDirective(); } } return(result); }
/// <summary> /// Extract the class name. /// </summary> /// <param name="tokens"></param> /// <returns></returns> private static ExtractedClassName Extract(VisualBasicTokenizer tokens) { ParseState state = new ParseState(); ExtractedClassName result = new ExtractedClassName(); foreach (Token t in tokens) { // Search first for keywords that we care about. if (t is KeywordToken) { state.Reset(); if (t.EqualsIgnoreCase("namespace")) { state.ResolvingNamespace = true; if (state.InsideConditionalDirective) { result.IsInsideConditionalBlock = true; } } else if (t.EqualsIgnoreCase("class")) { state.ResolvingClass = true; if (state.InsideConditionalDirective) { result.IsInsideConditionalBlock = true; } } else if (t.EqualsIgnoreCase("end")) { state.PopNamespacePart(); } } else if (t is VisualBasicTokenizer.LineTerminatorToken) { if (state.ResolvingNamespace) { state.PushNamespacePart(state.Namespace); } state.Reset(); } else if (t is VisualBasicTokenizer.SeparatorToken) { if (state.ResolvingNamespace) { if (t.InnerText == ".") { state.Namespace += "."; } } } else if (t is IdentifierToken) { // If we're resolving a namespace, then this is part of the namespace. if (state.ResolvingNamespace) { state.Namespace += t.InnerText; } // If we're resolving a class, then we're done. We found the class name. else if (state.ResolvingClass) { // We're done. result.Name = state.ComposeQualifiedClassName(t.InnerText); return result; } } else if (t is OpenConditionalDirectiveToken) { state.OpenConditionalDirective(); } else if (t is CloseConditionalDirectiveToken) { state.CloseConditionalDirective(); } } return result; }
private static ExtractedClassName Extract(CSharpTokenizer tokens) { ParseState state = new ParseState(); ExtractedClassName name = new ExtractedClassName(); foreach (Token token in tokens) { if (token is KeywordToken) { state.Reset(); if (token.InnerText == "namespace") { state.ResolvingNamespace = true; if (state.InsideConditionalDirective) { name.IsInsideConditionalBlock = true; } } else if (token.InnerText == "class") { state.ResolvingClass = true; if (state.InsideConditionalDirective) { name.IsInsideConditionalBlock = true; } } } else if (token is CSharpTokenizer.OpenScopeToken) { state.PushNamespacePart(state.Namespace); state.Reset(); } else if (token is CSharpTokenizer.CloseScopeToken) { state.Reset(); state.PopNamespacePart(); } else if (token is OperatorOrPunctuatorToken) { if (state.ResolvingNamespace && (token.InnerText == ".")) { state.Namespace = state.Namespace + "."; } } else if (token is IdentifierToken) { if (!state.ResolvingNamespace) { if (state.ResolvingClass) { name.Name = state.ComposeQualifiedClassName(token.InnerText); return name; } } else { state.Namespace = state.Namespace + token.InnerText; } } else if (token is OpenConditionalDirectiveToken) { state.OpenConditionalDirective(); } else if (token is CloseConditionalDirectiveToken) { state.CloseConditionalDirective(); } } return name; }
private static ExtractedClassName Extract(VisualBasicTokenizer tokens) { ParseState state = new ParseState(); ExtractedClassName name = new ExtractedClassName(); foreach (Token token in tokens) { if (token is KeywordToken) { state.Reset(); if (token.EqualsIgnoreCase("namespace")) { state.ResolvingNamespace = true; if (state.InsideConditionalDirective) { name.IsInsideConditionalBlock = true; } } else if (token.EqualsIgnoreCase("class")) { state.ResolvingClass = true; if (state.InsideConditionalDirective) { name.IsInsideConditionalBlock = true; } } else if (token.EqualsIgnoreCase("end")) { state.PopNamespacePart(); } } else if (token is VisualBasicTokenizer.LineTerminatorToken) { if (state.ResolvingNamespace) { state.PushNamespacePart(state.Namespace); } state.Reset(); } else if (token is VisualBasicTokenizer.SeparatorToken) { if (state.ResolvingNamespace && (token.InnerText == ".")) { state.Namespace = state.Namespace + "."; } } else if (token is IdentifierToken) { if (!state.ResolvingNamespace) { if (state.ResolvingClass) { name.Name = state.ComposeQualifiedClassName(token.InnerText); return(name); } } else { state.Namespace = state.Namespace + token.InnerText; } } else if (token is OpenConditionalDirectiveToken) { state.OpenConditionalDirective(); } else if (token is CloseConditionalDirectiveToken) { state.CloseConditionalDirective(); } } return(name); }
/// <summary> /// Extract the class name. /// </summary> /// <param name="tokens"></param> /// <returns></returns> private static ExtractedClassName Extract(CSharpTokenizer tokens) { ParseState state = new ParseState(); ExtractedClassName result = new ExtractedClassName(); foreach (Token t in tokens) { // Search first for the namespace keyword if (t is KeywordToken) { state.Reset(); if (t.InnerText == "namespace") { state.ResolvingNamespace = true; if (state.InsideConditionalDirective) { result.IsInsideConditionalBlock = true; } } else if (t.InnerText == "class") { state.ResolvingClass = true; if (state.InsideConditionalDirective) { result.IsInsideConditionalBlock = true; } } } else if (t is CSharpTokenizer.OpenScopeToken) { state.PushNamespacePart(state.Namespace); state.Reset(); } else if (t is CSharpTokenizer.CloseScopeToken) { state.Reset(); state.PopNamespacePart(); } else if (t is OperatorOrPunctuatorToken) { if (state.ResolvingNamespace) { if (t.InnerText == ".") { state.Namespace += "."; } } } else if (t is IdentifierToken) { // If we're resolving a namespace, then this is part of the namespace. if (state.ResolvingNamespace) { state.Namespace += t.InnerText; } // If we're resolving a class, then we're done. We found the class name. else if (state.ResolvingClass) { // We're done. result.Name = state.ComposeQualifiedClassName(t.InnerText); return result; } } else if (t is OpenConditionalDirectiveToken) { state.OpenConditionalDirective(); } else if (t is CloseConditionalDirectiveToken) { state.CloseConditionalDirective(); } } return result; }