| File: Syntax\SyntaxNodePartials.vb | Web Access |
| Project: src\roslyn\src\Compilers\VisualBasic\Portable\Microsoft.CodeAnalysis.VisualBasic.vbproj (Microsoft.CodeAnalysis.VisualBasic) |
' 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 Partial class extensions to certain of the syntax nodes (other that the ' base node SyntaxNode, which is in a different file.) '----------------------------------------------------------------------------------------------------------- Imports System.Threading Imports Microsoft.CodeAnalysis.Text Imports Microsoft.CodeAnalysis.VisualBasic.Symbols Imports Microsoft.CodeAnalysis.VisualBasic.Syntax Namespace Microsoft.CodeAnalysis.VisualBasic.Syntax Partial Public Class DocumentationCommentTriviaSyntax Friend Function GetInteriorXml() As String ' NOTE: is only used in parse tests Return DirectCast(Me.Green, InternalSyntax.DocumentationCommentTriviaSyntax).GetInteriorXml End Function End Class Partial Public Class DirectiveTriviaSyntax Private Shared ReadOnly s_hasDirectivesFunction As Func(Of SyntaxToken, Boolean) = Function(n) n.ContainsDirectives Public Function GetNextDirective(Optional predicate As Func(Of DirectiveTriviaSyntax, Boolean) = Nothing) As DirectiveTriviaSyntax Dim token = CType(MyBase.ParentTrivia.Token, SyntaxToken) Dim [next] As Boolean = False Do While (token.Kind <> SyntaxKind.None) Dim tr As SyntaxTrivia For Each tr In token.LeadingTrivia If [next] Then If tr.IsDirective Then Dim d As DirectiveTriviaSyntax = DirectCast(tr.GetStructure, DirectiveTriviaSyntax) If ((predicate Is Nothing) OrElse predicate.Invoke(d)) Then Return d End If End If Continue For End If If (tr.UnderlyingNode Is MyBase.Green) Then [next] = True End If Next token = token.GetNextToken(s_hasDirectivesFunction) Loop Return Nothing End Function Public Function GetPreviousDirective(Optional predicate As Func(Of DirectiveTriviaSyntax, Boolean) = Nothing) As DirectiveTriviaSyntax Dim token As SyntaxToken = CType(MyBase.ParentTrivia.Token, SyntaxToken) Dim [next] As Boolean = False Do While (token.Kind <> SyntaxKind.None) For Each tr In token.LeadingTrivia.Reverse() If [next] Then If tr.IsDirective Then Dim d As DirectiveTriviaSyntax = DirectCast(tr.GetStructure, DirectiveTriviaSyntax) If ((predicate Is Nothing) OrElse predicate.Invoke(d)) Then Return d End If End If ElseIf (tr.UnderlyingNode Is MyBase.Green) Then [next] = True End If Next token = token.GetPreviousToken(s_hasDirectivesFunction) Loop Return Nothing End Function End Class Partial Public Class SingleLineLambdaExpressionSyntax ''' <summary> ''' Single line subs only have a single statement. However, when binding it is convenient to have a statement list. For example, ''' dim statements are not valid in a single line lambda. However, it is nice to be able to provide semantic info about the local. ''' The only way to create locals is to have a statement list. This method is friend because the statement list should not be part ''' of the public api. ''' </summary> Friend ReadOnly Property Statements As SyntaxList(Of StatementSyntax) Get Debug.Assert(Kind = SyntaxKind.SingleLineSubLambdaExpression, "Only SingleLineSubLambdas have statements.") Debug.Assert(GetNodeSlot(1) Is Body, "SingleLineLambdaExpressionSyntax structure has changed. Update index passed to GetChildIndex.") Return New SyntaxList(Of StatementSyntax)(Body) End Get End Property End Class Partial Public Class MethodBaseSyntax Friend ReadOnly Property AsClauseInternal As AsClauseSyntax Get Select Case Me.Kind Case SyntaxKind.SubStatement, SyntaxKind.FunctionStatement Return DirectCast(Me, MethodStatementSyntax).AsClause Case SyntaxKind.SubLambdaHeader, SyntaxKind.FunctionLambdaHeader Return DirectCast(Me, LambdaHeaderSyntax).AsClause Case SyntaxKind.DeclareSubStatement, SyntaxKind.DeclareFunctionStatement Return DirectCast(Me, DeclareStatementSyntax).AsClause Case SyntaxKind.DelegateSubStatement, SyntaxKind.DelegateFunctionStatement Return DirectCast(Me, DelegateStatementSyntax).AsClause Case SyntaxKind.EventStatement Return DirectCast(Me, EventStatementSyntax).AsClause Case SyntaxKind.OperatorStatement Return DirectCast(Me, OperatorStatementSyntax).AsClause Case SyntaxKind.PropertyStatement Return DirectCast(Me, PropertyStatementSyntax).AsClause Case SyntaxKind.SubNewStatement, SyntaxKind.GetAccessorStatement, SyntaxKind.SetAccessorStatement, SyntaxKind.AddHandlerAccessorStatement, SyntaxKind.RemoveHandlerAccessorStatement, SyntaxKind.RaiseEventAccessorStatement Return Nothing Case Else Throw ExceptionUtilities.UnexpectedValue(Me.Kind) End Select End Get End Property End Class End Namespace