| File: Binding\DeclarationInitializerBinder.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. Imports System.Collections.Immutable Imports Microsoft.CodeAnalysis.Text Imports Microsoft.CodeAnalysis.VisualBasic.Symbols Imports Microsoft.CodeAnalysis.VisualBasic.Syntax Namespace Microsoft.CodeAnalysis.VisualBasic ''' <summary> ''' Binder used for field, auto property initializations and parameter default values. ''' </summary> Friend NotInheritable Class DeclarationInitializerBinder Inherits Binder ''' <summary> ''' Backing field for the ContainingMember property ''' </summary> Private ReadOnly _symbol As Symbol ''' <summary> ''' Backing field for the AdditionalContainingMembers property ''' </summary> Private ReadOnly _additionalSymbols As ImmutableArray(Of Symbol) ''' <summary> Root syntax node </summary> Private ReadOnly _root As VisualBasicSyntaxNode ''' <summary> ''' Initializes a new instance of the <see cref="DeclarationInitializerBinder"/> class. ''' </summary> ''' <param name="symbol">The field, property or parameter symbol with an initializer or default value.</param> ''' <param name="additionalSymbols">Additional field for property symbols initialized with the initializer.</param> ''' <param name="next">The next binder.</param> ''' <param name="root">Root syntax node</param> Public Sub New(symbol As Symbol, additionalSymbols As ImmutableArray(Of Symbol), [next] As Binder, root As VisualBasicSyntaxNode) MyBase.New([next]) Debug.Assert((symbol.Kind = SymbolKind.Field) OrElse (symbol.Kind = SymbolKind.Property) OrElse (symbol.Kind = SymbolKind.Parameter)) Debug.Assert(additionalSymbols.All(Function(s) s.Kind = symbol.Kind AndAlso (s.Kind = SymbolKind.Field OrElse s.Kind = SymbolKind.Property))) Debug.Assert(symbol.Kind <> SymbolKind.Parameter OrElse additionalSymbols.IsEmpty) Me._symbol = symbol Me._additionalSymbols = additionalSymbols Debug.Assert(root IsNot Nothing) _root = root End Sub ''' <summary> ''' The member containing the binding context. ''' This property is the main reason for this binder, because the binding context for an initialization ''' needs to be the field or property symbol. ''' </summary> Public Overrides ReadOnly Property ContainingMember As Symbol Get Return Me._symbol End Get End Property ''' <summary> ''' Additional members associated with the binding context ''' Currently, this field is only used for multiple field/property symbols initialized by an AsNew initializer, e.g. "Dim x, y As New Integer" or "WithEvents x, y as New Object" ''' </summary> Public Overrides ReadOnly Property AdditionalContainingMembers As ImmutableArray(Of Symbol) Get Return Me._additionalSymbols End Get End Property ''' <summary> Field or property declaration statement syntax node </summary> Friend ReadOnly Property Root As VisualBasicSyntaxNode Get Return _root End Get End Property ' Initializers are expressions and so contain no descendant binders, except for lambda bodies, which are handled ' elsewhere (in MemberSemanticModel). Public Overrides Function GetBinder(node As SyntaxNode) As Binder Return Nothing End Function Public Overrides Function GetBinder(stmts As SyntaxList(Of StatementSyntax)) As Binder Return Nothing End Function End Class End Namespace