/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Compilers/VisualBasic/Portable/Syntax/InternalSyntax/SyntaxNodeFactories.vb
567 строк
27 KB
Youssef Victor
IDE0036 - VB
27 авг 2020, 18:40
27 авг 2020, 18:40
c55795e
Код
Авторство
О чём код?
' Licensed to the .NET Foundation under one or more agreements. ' The .NET Foundation licenses this file to you under the MIT license. ' See the LICENSE file in the project root for more information. '----------------------------------------------------------------------------------------------------------- ' Contains hand-written factories for the SyntaxNodes. Most factories are ' code-generated into SyntaxNodes.vb, but some are easier to hand-write. '----------------------------------------------------------------------------------------------------------- Imports Microsoft.CodeAnalysis.Syntax.InternalSyntax Imports Microsoft.CodeAnalysis.Text Imports Microsoft.CodeAnalysis.VisualBasic.Symbols Imports Microsoft.CodeAnalysis.VisualBasic.Syntax Imports InternalSyntax = Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax Namespace Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax Partial Friend Class SyntaxFactory Friend Shared Function IntegerLiteralToken(text As String, base As LiteralBase, typeSuffix As TypeCharacter, value As ULong, leadingTrivia As GreenNode, trailingTrivia As GreenNode) As IntegerLiteralTokenSyntax Debug.Assert(text IsNot Nothing) Select Case typeSuffix Case TypeCharacter.ShortLiteral Return New IntegerLiteralTokenSyntax(Of Short)(SyntaxKind.IntegerLiteralToken, text, leadingTrivia, trailingTrivia, base, typeSuffix, CShort(value)) Case TypeCharacter.UShortLiteral Return New IntegerLiteralTokenSyntax(Of UShort)(SyntaxKind.IntegerLiteralToken, text, leadingTrivia, trailingTrivia, base, typeSuffix, CUShort(value)) Case TypeCharacter.IntegerLiteral, TypeCharacter.Integer Return New IntegerLiteralTokenSyntax(Of Integer)(SyntaxKind.IntegerLiteralToken, text, leadingTrivia, trailingTrivia, base, typeSuffix, CInt(value)) Case TypeCharacter.UIntegerLiteral Return New IntegerLiteralTokenSyntax(Of UInteger)(SyntaxKind.IntegerLiteralToken, text, leadingTrivia, trailingTrivia, base, typeSuffix, CUInt(value)) Case TypeCharacter.LongLiteral, TypeCharacter.Long Return New IntegerLiteralTokenSyntax(Of Long)(SyntaxKind.IntegerLiteralToken, text, leadingTrivia, trailingTrivia, base, typeSuffix, CLng(value)) Case TypeCharacter.ULongLiteral Return New IntegerLiteralTokenSyntax(Of ULong)(SyntaxKind.IntegerLiteralToken, text, leadingTrivia, trailingTrivia, base, typeSuffix, value) Case TypeCharacter.None Dim useIntegerType As Boolean = False If base = LiteralBase.Decimal Then useIntegerType = (value <= Integer.MaxValue) Else useIntegerType = ((value And (Not &HFFFFFFFFUL)) = 0) End If If useIntegerType Then Return New IntegerLiteralTokenSyntax(Of Integer)(SyntaxKind.IntegerLiteralToken, text, leadingTrivia, trailingTrivia, base, typeSuffix, CInt(value)) Else Return New IntegerLiteralTokenSyntax(Of Long)(SyntaxKind.IntegerLiteralToken, text, leadingTrivia, trailingTrivia, base, typeSuffix, CLng(value)) End If Case Else Throw New ArgumentException(NameOf(typeSuffix)) End Select End Function Friend Shared Function FloatingLiteralToken(text As String, typeSuffix As TypeCharacter, value As Double, leadingTrivia As GreenNode, trailingTrivia As GreenNode) As FloatingLiteralTokenSyntax Debug.Assert(text IsNot Nothing) Select Case typeSuffix Case TypeCharacter.DoubleLiteral, TypeCharacter.Double, TypeCharacter.None Return New FloatingLiteralTokenSyntax(Of Double)(SyntaxKind.FloatingLiteralToken, text, leadingTrivia, trailingTrivia, typeSuffix, value) Case TypeCharacter.SingleLiteral, TypeCharacter.Single Return New FloatingLiteralTokenSyntax(Of Single)(SyntaxKind.FloatingLiteralToken, text, leadingTrivia, trailingTrivia, typeSuffix, CSng(value)) Case Else Throw New ArgumentException(NameOf(typeSuffix)) End Select End Function ''' <summary> ''' Create an identifier node without brackets or type character. ''' </summary> Friend Shared Function Identifier(text As String, leadingTrivia As GreenNode, trailingTrivia As GreenNode) As IdentifierTokenSyntax Debug.Assert(text IsNot Nothing) Return New SimpleIdentifierSyntax(SyntaxKind.IdentifierToken, Nothing, Nothing, text, leadingTrivia, trailingTrivia) End Function ''' <summary> ''' Create an identifier node with brackets or type character. ''' </summary> Friend Shared Function Identifier(text As String, possibleKeywordKind As SyntaxKind, isBracketed As Boolean, identifierText As String, typeCharacter As TypeCharacter, leadingTrivia As GreenNode, trailingTrivia As GreenNode) As IdentifierTokenSyntax Debug.Assert(text IsNot Nothing) Return New ComplexIdentifierSyntax(SyntaxKind.IdentifierToken, Nothing, Nothing, text, leadingTrivia, trailingTrivia, possibleKeywordKind, isBracketed, identifierText, typeCharacter) End Function ''' <summary> ''' Create an identifier node without brackets or type character or trivia. ''' </summary> Friend Shared Function Identifier(text As String) As IdentifierTokenSyntax Debug.Assert(text IsNot Nothing) Return New SimpleIdentifierSyntax(SyntaxKind.IdentifierToken, Nothing, Nothing, text, Nothing, Nothing) End Function ''' <summary> ''' Create a missing identifier. ''' </summary> Friend Shared Function MissingIdentifier() As IdentifierTokenSyntax Return New SimpleIdentifierSyntax(SyntaxKind.IdentifierToken, Nothing, Nothing, "", Nothing, Nothing) End Function ''' <summary> ''' Create a missing contextual keyword. ''' </summary> Friend Shared Function MissingIdentifier(kind As SyntaxKind) As IdentifierTokenSyntax Return New ComplexIdentifierSyntax(SyntaxKind.IdentifierToken, Nothing, Nothing, "", Nothing, Nothing, kind, False, "", TypeCharacter.None) End Function ''' <summary> ''' Create a missing keyword. ''' </summary> Friend Shared Function MissingKeyword(kind As SyntaxKind) As KeywordSyntax Return New KeywordSyntax(kind, "", Nothing, Nothing) End Function ''' <summary> ''' Create a missing punctuation mark. ''' </summary> Friend Shared Function MissingPunctuation(kind As SyntaxKind) As PunctuationSyntax Return New PunctuationSyntax(kind, "", Nothing, Nothing) End Function ''' <summary> ''' Create a missing string literal. ''' </summary> Friend Shared Function MissingStringLiteral() As StringLiteralTokenSyntax Return StringLiteralToken("", "", Nothing, Nothing) End Function ''' <summary> ''' Create a missing character literal. ''' </summary> Friend Shared Function MissingCharacterLiteralToken() As CharacterLiteralTokenSyntax Return CharacterLiteralToken("", Nothing, Nothing, Nothing) End Function ''' <summary> ''' Create a missing integer literal. ''' </summary> Friend Shared Function MissingIntegerLiteralToken() As IntegerLiteralTokenSyntax Return IntegerLiteralToken("", LiteralBase.Decimal, TypeCharacter.None, Nothing, Nothing, Nothing) End Function ''' <summary> ''' Creates a copy of a token. ''' <para name="err"></para> ''' <para name="trivia"></para> ''' </summary> ''' <returns>The new token</returns> Friend Shared Function MissingToken(kind As SyntaxKind) As SyntaxToken Dim t As SyntaxToken Select Case kind Case SyntaxKind.StatementTerminatorToken t = SyntaxFactory.Token(Nothing, SyntaxKind.StatementTerminatorToken, Nothing, String.Empty) Case SyntaxKind.EndOfFileToken t = SyntaxFactory.EndOfFileToken() Case SyntaxKind.AddHandlerKeyword, SyntaxKind.AddressOfKeyword, SyntaxKind.AliasKeyword, SyntaxKind.AndKeyword, SyntaxKind.AndAlsoKeyword, SyntaxKind.AsKeyword, SyntaxKind.BooleanKeyword, SyntaxKind.ByRefKeyword, SyntaxKind.ByteKeyword, SyntaxKind.ByValKeyword, SyntaxKind.CallKeyword, SyntaxKind.CaseKeyword, SyntaxKind.CatchKeyword, SyntaxKind.CBoolKeyword, SyntaxKind.CByteKeyword, SyntaxKind.CCharKeyword, SyntaxKind.CDateKeyword, SyntaxKind.CDecKeyword, SyntaxKind.CDblKeyword, SyntaxKind.CharKeyword, SyntaxKind.CIntKeyword, SyntaxKind.ClassKeyword, SyntaxKind.CLngKeyword, SyntaxKind.CObjKeyword, SyntaxKind.ConstKeyword, SyntaxKind.ContinueKeyword, SyntaxKind.CSByteKeyword, SyntaxKind.CShortKeyword, SyntaxKind.CSngKeyword, SyntaxKind.CStrKeyword, SyntaxKind.CTypeKeyword, SyntaxKind.CUIntKeyword, SyntaxKind.CULngKeyword, SyntaxKind.CUShortKeyword, SyntaxKind.DateKeyword, SyntaxKind.DecimalKeyword, SyntaxKind.DeclareKeyword, SyntaxKind.DefaultKeyword, SyntaxKind.DelegateKeyword, SyntaxKind.DimKeyword, SyntaxKind.DirectCastKeyword, SyntaxKind.DoKeyword, SyntaxKind.DoubleKeyword, SyntaxKind.EachKeyword, SyntaxKind.ElseKeyword, SyntaxKind.ElseIfKeyword, SyntaxKind.EndKeyword, SyntaxKind.EnumKeyword, SyntaxKind.EraseKeyword, SyntaxKind.ErrorKeyword, SyntaxKind.EventKeyword, SyntaxKind.ExitKeyword, SyntaxKind.FalseKeyword, SyntaxKind.FinallyKeyword, SyntaxKind.ForKeyword, SyntaxKind.FriendKeyword, SyntaxKind.FunctionKeyword, SyntaxKind.GetKeyword, SyntaxKind.GetTypeKeyword, SyntaxKind.GetXmlNamespaceKeyword, SyntaxKind.GlobalKeyword, SyntaxKind.GoToKeyword, SyntaxKind.HandlesKeyword, SyntaxKind.IfKeyword, SyntaxKind.ImplementsKeyword, SyntaxKind.ImportsKeyword, SyntaxKind.InKeyword, SyntaxKind.InheritsKeyword, SyntaxKind.IntegerKeyword, SyntaxKind.InterfaceKeyword, SyntaxKind.IsKeyword, SyntaxKind.IsNotKeyword, SyntaxKind.LetKeyword, SyntaxKind.LibKeyword, SyntaxKind.LikeKeyword, SyntaxKind.LongKeyword, SyntaxKind.LoopKeyword, SyntaxKind.MeKeyword, SyntaxKind.ModKeyword, SyntaxKind.ModuleKeyword, SyntaxKind.MustInheritKeyword, SyntaxKind.MustOverrideKeyword, SyntaxKind.MyBaseKeyword, SyntaxKind.MyClassKeyword, SyntaxKind.NameOfKeyword, SyntaxKind.NamespaceKeyword, SyntaxKind.NarrowingKeyword, SyntaxKind.NextKeyword, SyntaxKind.NewKeyword, SyntaxKind.NotKeyword, SyntaxKind.NothingKeyword, SyntaxKind.NotInheritableKeyword, SyntaxKind.NotOverridableKeyword, SyntaxKind.ObjectKeyword, SyntaxKind.OfKeyword, SyntaxKind.OnKeyword, SyntaxKind.OperatorKeyword, SyntaxKind.OptionKeyword, SyntaxKind.OptionalKeyword, SyntaxKind.OrKeyword, SyntaxKind.OrElseKeyword, SyntaxKind.OverloadsKeyword, SyntaxKind.OverridableKeyword, SyntaxKind.OverridesKeyword, SyntaxKind.ParamArrayKeyword, SyntaxKind.PartialKeyword, SyntaxKind.PrivateKeyword, SyntaxKind.PropertyKeyword, SyntaxKind.ProtectedKeyword, SyntaxKind.PublicKeyword, SyntaxKind.RaiseEventKeyword, SyntaxKind.ReadOnlyKeyword, SyntaxKind.ReDimKeyword, SyntaxKind.REMKeyword, SyntaxKind.RemoveHandlerKeyword, SyntaxKind.ResumeKeyword, SyntaxKind.ReturnKeyword, SyntaxKind.SByteKeyword, SyntaxKind.SelectKeyword, SyntaxKind.SetKeyword, SyntaxKind.ShadowsKeyword, SyntaxKind.SharedKeyword, SyntaxKind.ShortKeyword, SyntaxKind.SingleKeyword, SyntaxKind.StaticKeyword, SyntaxKind.StepKeyword, SyntaxKind.StopKeyword, SyntaxKind.StringKeyword, SyntaxKind.StructureKeyword, SyntaxKind.SubKeyword, SyntaxKind.SyncLockKeyword, SyntaxKind.ThenKeyword, SyntaxKind.ThrowKeyword, SyntaxKind.ToKeyword, SyntaxKind.TrueKeyword, SyntaxKind.TryKeyword, SyntaxKind.TryCastKeyword, SyntaxKind.TypeOfKeyword, SyntaxKind.UIntegerKeyword, SyntaxKind.ULongKeyword, SyntaxKind.UShortKeyword, SyntaxKind.UsingKeyword, SyntaxKind.WhenKeyword, SyntaxKind.WhileKeyword, SyntaxKind.WideningKeyword, SyntaxKind.WithKeyword, SyntaxKind.WithEventsKeyword, SyntaxKind.WriteOnlyKeyword, SyntaxKind.XorKeyword, SyntaxKind.EndIfKeyword, SyntaxKind.GosubKeyword, SyntaxKind.VariantKeyword, SyntaxKind.WendKeyword, SyntaxKind.OutKeyword t = SyntaxFactory.MissingKeyword(kind) Case SyntaxKind.AggregateKeyword, SyntaxKind.AllKeyword, SyntaxKind.AnsiKeyword, SyntaxKind.AscendingKeyword, SyntaxKind.AssemblyKeyword, SyntaxKind.AutoKeyword, SyntaxKind.BinaryKeyword, SyntaxKind.ByKeyword, SyntaxKind.CompareKeyword, SyntaxKind.CustomKeyword, SyntaxKind.DescendingKeyword, SyntaxKind.DisableKeyword, SyntaxKind.DistinctKeyword, SyntaxKind.EnableKeyword, SyntaxKind.EqualsKeyword, SyntaxKind.ExplicitKeyword, SyntaxKind.ExternalSourceKeyword, SyntaxKind.ExternalChecksumKeyword, SyntaxKind.FromKeyword, SyntaxKind.GroupKeyword, SyntaxKind.InferKeyword, SyntaxKind.IntoKeyword, SyntaxKind.IsFalseKeyword, SyntaxKind.IsTrueKeyword, SyntaxKind.JoinKeyword, SyntaxKind.KeyKeyword, SyntaxKind.MidKeyword, SyntaxKind.OffKeyword, SyntaxKind.OrderKeyword, SyntaxKind.PreserveKeyword, SyntaxKind.RegionKeyword, SyntaxKind.ReferenceKeyword, SyntaxKind.SkipKeyword, SyntaxKind.StrictKeyword, SyntaxKind.TextKeyword, SyntaxKind.TakeKeyword, SyntaxKind.UnicodeKeyword, SyntaxKind.UntilKeyword, SyntaxKind.WarningKeyword, SyntaxKind.WhereKeyword ' These are identifiers that have a contextual kind Return SyntaxFactory.MissingIdentifier(kind) Case SyntaxKind.ExclamationToken, SyntaxKind.CommaToken, SyntaxKind.HashToken, SyntaxKind.AmpersandToken, SyntaxKind.SingleQuoteToken, SyntaxKind.OpenParenToken, SyntaxKind.CloseParenToken, SyntaxKind.OpenBraceToken, SyntaxKind.CloseBraceToken, SyntaxKind.DoubleQuoteToken, SyntaxKind.SemicolonToken, SyntaxKind.AsteriskToken, SyntaxKind.PlusToken, SyntaxKind.MinusToken, SyntaxKind.DotToken, SyntaxKind.SlashToken, SyntaxKind.ColonToken, SyntaxKind.LessThanToken, SyntaxKind.LessThanEqualsToken, SyntaxKind.LessThanGreaterThanToken, SyntaxKind.EqualsToken, SyntaxKind.GreaterThanToken, SyntaxKind.GreaterThanEqualsToken, SyntaxKind.BackslashToken, SyntaxKind.CaretToken, SyntaxKind.ColonEqualsToken, SyntaxKind.AmpersandEqualsToken, SyntaxKind.AsteriskEqualsToken, SyntaxKind.PlusEqualsToken, SyntaxKind.MinusEqualsToken, SyntaxKind.SlashEqualsToken, SyntaxKind.BackslashEqualsToken, SyntaxKind.CaretEqualsToken, SyntaxKind.LessThanLessThanToken, SyntaxKind.GreaterThanGreaterThanToken, SyntaxKind.LessThanLessThanEqualsToken, SyntaxKind.GreaterThanGreaterThanEqualsToken, SyntaxKind.QuestionToken t = SyntaxFactory.MissingPunctuation(kind) Case SyntaxKind.FloatingLiteralToken t = SyntaxFactory.FloatingLiteralToken("", TypeCharacter.None, Nothing, Nothing, Nothing) Case SyntaxKind.DecimalLiteralToken t = SyntaxFactory.DecimalLiteralToken("", TypeCharacter.None, Nothing, Nothing, Nothing) Case SyntaxKind.DateLiteralToken t = SyntaxFactory.DateLiteralToken("", Nothing, Nothing, Nothing) Case SyntaxKind.XmlNameToken t = SyntaxFactory.XmlNameToken("", SyntaxKind.XmlNameToken, Nothing, Nothing) Case SyntaxKind.XmlTextLiteralToken t = SyntaxFactory.XmlTextLiteralToken("", "", Nothing, Nothing) Case SyntaxKind.SlashGreaterThanToken, SyntaxKind.LessThanSlashToken, SyntaxKind.LessThanExclamationMinusMinusToken, SyntaxKind.MinusMinusGreaterThanToken, SyntaxKind.LessThanQuestionToken, SyntaxKind.QuestionGreaterThanToken, SyntaxKind.LessThanPercentEqualsToken, SyntaxKind.PercentGreaterThanToken, SyntaxKind.BeginCDataToken, SyntaxKind.EndCDataToken t = SyntaxFactory.MissingPunctuation(kind) Case SyntaxKind.IdentifierToken t = SyntaxFactory.MissingIdentifier() Case SyntaxKind.IntegerLiteralToken t = MissingIntegerLiteralToken() Case SyntaxKind.StringLiteralToken t = SyntaxFactory.MissingStringLiteral() Case SyntaxKind.CharacterLiteralToken t = SyntaxFactory.MissingCharacterLiteralToken() Case SyntaxKind.InterpolatedStringTextToken t = SyntaxFactory.InterpolatedStringTextToken("", "", Nothing, Nothing) Case Else Throw ExceptionUtilities.UnexpectedValue(kind) End Select Return t End Function Friend Shared Function BadToken(SubKind As SyntaxSubKind, text As String, precedingTrivia As GreenNode, followingTrivia As GreenNode) As BadTokenSyntax Return New BadTokenSyntax(SyntaxKind.BadToken, SubKind, Nothing, Nothing, text, precedingTrivia, followingTrivia) End Function ''' <summary> ''' Create an end-of-text token. ''' </summary> Friend Shared Function EndOfFileToken(precedingTrivia As SyntaxTrivia) As PunctuationSyntax Return New PunctuationSyntax(SyntaxKind.EndOfFileToken, "", precedingTrivia, Nothing) End Function ''' <summary> ''' Create an end-of-text token. ''' </summary> Friend Shared Function EndOfFileToken() As PunctuationSyntax Return New PunctuationSyntax(SyntaxKind.EndOfFileToken, "", Nothing, Nothing) End Function Friend Shared Function Identifier(text As String, isBracketed As Boolean, baseText As String, typeCharacter As TypeCharacter, precedingTrivia As GreenNode, followingTrivia As GreenNode) As IdentifierTokenSyntax Debug.Assert(text IsNot Nothing) Return New ComplexIdentifierSyntax(SyntaxKind.IdentifierToken, Nothing, Nothing, text, precedingTrivia, followingTrivia, SyntaxKind.IdentifierToken, isBracketed, baseText, typeCharacter) End Function Private Shared s_notMissingEmptyToken As PunctuationSyntax = Nothing Friend Shared ReadOnly Property NotMissingEmptyToken() As PunctuationSyntax Get If s_notMissingEmptyToken Is Nothing Then s_notMissingEmptyToken = New PunctuationSyntax(SyntaxKind.EmptyToken, "", Nothing, Nothing) End If Return s_notMissingEmptyToken End Get End Property Private Shared s_missingEmptyToken As PunctuationSyntax = Nothing Friend Shared ReadOnly Property MissingEmptyToken() As PunctuationSyntax Get If s_missingEmptyToken Is Nothing Then s_missingEmptyToken = New PunctuationSyntax(SyntaxKind.EmptyToken, "", Nothing, Nothing) s_missingEmptyToken.ClearFlags(GreenNode.NodeFlags.IsNotMissing) End If Return s_missingEmptyToken End Get End Property Private Shared s_statementTerminatorToken As PunctuationSyntax = Nothing Friend Shared ReadOnly Property StatementTerminatorToken() As PunctuationSyntax Get If s_statementTerminatorToken Is Nothing Then s_statementTerminatorToken = New PunctuationSyntax(SyntaxKind.StatementTerminatorToken, "", Nothing, Nothing) s_statementTerminatorToken.SetFlags(GreenNode.NodeFlags.IsNotMissing) End If Return s_statementTerminatorToken End Get End Property Private Shared s_colonToken As PunctuationSyntax = Nothing Friend Shared ReadOnly Property ColonToken() As PunctuationSyntax Get If s_colonToken Is Nothing Then s_colonToken = New PunctuationSyntax(SyntaxKind.ColonToken, "", Nothing, Nothing) s_colonToken.SetFlags(GreenNode.NodeFlags.IsNotMissing) End If Return s_colonToken End Get End Property Private Shared ReadOnly s_missingExpr As ExpressionSyntax = SyntaxFactory.IdentifierName(SyntaxFactory.Identifier("", Nothing, Nothing)) Friend Shared Function MissingExpression() As ExpressionSyntax Return s_missingExpr End Function Private Shared ReadOnly s_emptyStatement As EmptyStatementSyntax = SyntaxFactory.EmptyStatement(NotMissingEmptyToken) Friend Shared Function EmptyStatement() As EmptyStatementSyntax Return s_emptyStatement End Function Private Shared ReadOnly s_omittedArgument As OmittedArgumentSyntax = SyntaxFactory.OmittedArgument(NotMissingEmptyToken) Friend Shared Function OmittedArgument() As OmittedArgumentSyntax Return s_omittedArgument End Function Public Shared Function TypeBlock(ByVal blockKind As SyntaxKind, ByVal begin As TypeStatementSyntax, ByVal [inherits] As CodeAnalysis.Syntax.InternalSyntax.SyntaxList(Of InheritsStatementSyntax), ByVal [implements] As CodeAnalysis.Syntax.InternalSyntax.SyntaxList(Of ImplementsStatementSyntax), ByVal members As CodeAnalysis.Syntax.InternalSyntax.SyntaxList(Of StatementSyntax), ByVal [end] As EndBlockStatementSyntax) As TypeBlockSyntax Select Case blockKind Case SyntaxKind.ModuleBlock Return SyntaxFactory.ModuleBlock(DirectCast(begin, ModuleStatementSyntax), [inherits], [implements], members, [end]) Case SyntaxKind.ClassBlock Return SyntaxFactory.ClassBlock(DirectCast(begin, ClassStatementSyntax), [inherits], [implements], members, [end]) Case SyntaxKind.StructureBlock Return SyntaxFactory.StructureBlock(DirectCast(begin, StructureStatementSyntax), [inherits], [implements], members, [end]) Case SyntaxKind.InterfaceBlock Return SyntaxFactory.InterfaceBlock(DirectCast(begin, InterfaceStatementSyntax), [inherits], [implements], members, [end]) Case Else Throw ExceptionUtilities.UnexpectedValue(blockKind) End Select End Function Public Shared Function TypeStatement(ByVal statementKind As SyntaxKind, ByVal attributes As CodeAnalysis.Syntax.InternalSyntax.SyntaxList(Of GreenNode), ByVal modifiers As CodeAnalysis.Syntax.InternalSyntax.SyntaxList(Of GreenNode), ByVal keyword As KeywordSyntax, ByVal identifier As IdentifierTokenSyntax, ByVal typeParameterList As TypeParameterListSyntax) As TypeStatementSyntax Select Case statementKind Case SyntaxKind.ModuleStatement Return SyntaxFactory.ModuleStatement(attributes, modifiers, keyword, identifier, typeParameterList) Case SyntaxKind.ClassStatement Return SyntaxFactory.ClassStatement(attributes, modifiers, keyword, identifier, typeParameterList) Case SyntaxKind.StructureStatement Return SyntaxFactory.StructureStatement(attributes, modifiers, keyword, identifier, typeParameterList) Case SyntaxKind.InterfaceStatement Return SyntaxFactory.InterfaceStatement(attributes, modifiers, keyword, identifier, typeParameterList) Case Else Throw ExceptionUtilities.UnexpectedValue(statementKind) End Select End Function End Class End Namespace