/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Compilers/VisualBasic/Portable/Compilation/SpeculativeSemanticModelWithMemberModel.vb
305 строк
17 KB
AlekseyTs
VB: Align design around speculative semantic models with C#. (#64751)
18 окт 2022, 21:51
Не верифицирован
18 окт 2022, 21:51
3f694a3
Код
Авторство
О чём код?
' 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 System.Runtime.InteropServices Imports System.Threading Imports Microsoft.CodeAnalysis.Text Imports Microsoft.CodeAnalysis.VisualBasic.Symbols Imports Microsoft.CodeAnalysis.VisualBasic.Syntax Namespace Microsoft.CodeAnalysis.VisualBasic ''' <summary> ''' Instances of this type represent user-facing speculative semantic models that are backed by ''' internal <see cref="MemberSemanticModel"/>. ''' </summary> Friend NotInheritable Class SpeculativeSemanticModelWithMemberModel Inherits PublicSemanticModel Private ReadOnly _parentSemanticModel As SyntaxTreeSemanticModel Private ReadOnly _speculatedPosition As Integer Private ReadOnly _memberModel As MemberSemanticModel Private Sub New(parentSemanticModel As SyntaxTreeSemanticModel, speculatedPosition As Integer) Debug.Assert(Not parentSemanticModel.IsSpeculativeSemanticModel, VBResources.ChainingSpeculativeModelIsNotSupported) _parentSemanticModel = parentSemanticModel _speculatedPosition = speculatedPosition End Sub Friend Sub New(parentSemanticModel As SyntaxTreeSemanticModel, position As Integer, root As AttributeSyntax, binder As Binder) Me.New(parentSemanticModel, position) Debug.Assert(root IsNot Nothing) Debug.Assert(binder IsNot Nothing) Debug.Assert(binder.IsSemanticModelBinder) _memberModel = New AttributeSemanticModel(root, binder, containingPublicSemanticModel:=Me) End Sub Friend Sub New(parentSemanticModel As SyntaxTreeSemanticModel, position As Integer, root As EqualsValueSyntax, binder As Binder) Me.New(parentSemanticModel, position) Debug.Assert(root IsNot Nothing) Debug.Assert(binder IsNot Nothing) Debug.Assert(binder.IsSemanticModelBinder) _memberModel = New InitializerSemanticModel(root, binder, containingPublicSemanticModel:=Me) End Sub Friend Sub New(parentSemanticModel As SyntaxTreeSemanticModel, position As Integer, root As VisualBasicSyntaxNode, binder As Binder) Me.New(parentSemanticModel, position) Debug.Assert(root IsNot Nothing) Debug.Assert(binder IsNot Nothing) Debug.Assert(binder.IsSemanticModelBinder) _memberModel = New MethodBodySemanticModel(root, binder, containingPublicSemanticModel:=Me) End Sub Friend Sub New(parentSemanticModel As SyntaxTreeSemanticModel, position As Integer, root As TypeSyntax, binder As Binder) Me.New(parentSemanticModel, position) Debug.Assert(root IsNot Nothing) Debug.Assert(binder IsNot Nothing) Debug.Assert(binder.IsSemanticModelBinder) _memberModel = New SpeculativeMemberSemanticModel(Me, root, binder) End Sub Friend Sub New(parentSemanticModel As SyntaxTreeSemanticModel, position As Integer, root As RangeArgumentSyntax, binder As Binder) Me.New(parentSemanticModel, position) Debug.Assert(root IsNot Nothing) Debug.Assert(binder IsNot Nothing) Debug.Assert(binder.IsSemanticModelBinder) _memberModel = New SpeculativeMemberSemanticModel(Me, root, binder) End Sub Friend Overrides ReadOnly Property Root As SyntaxNode Get Return _memberModel.Root End Get End Property Public Overrides ReadOnly Property SyntaxTree As SyntaxTree Get Return _memberModel.SyntaxTree End Get End Property Public Overrides ReadOnly Property IsSpeculativeSemanticModel As Boolean Get Return True End Get End Property Public Overrides ReadOnly Property OriginalPositionForSpeculation As Integer Get Return Me._speculatedPosition End Get End Property Public Overrides ReadOnly Property ParentModel As SemanticModel Get Return Me._parentSemanticModel End Get End Property Public Overrides ReadOnly Property IgnoresAccessibility As Boolean Get Return Me._parentSemanticModel.IgnoresAccessibility End Get End Property Public Overrides ReadOnly Property Compilation As VisualBasicCompilation Get Return _memberModel.Compilation End Get End Property Friend Overloads Overrides Function GetEnclosingBinder(position As Integer) As Binder Return _memberModel.GetEnclosingBinder(position) End Function Public Overrides Function ClassifyConversion(expression As ExpressionSyntax, destination As ITypeSymbol) As Conversion Return _memberModel.ClassifyConversion(expression, destination) End Function Friend Overrides Function GetInvokeSummaryForRaiseEvent(node As RaiseEventStatementSyntax) As BoundNodeSummary Return _memberModel.GetInvokeSummaryForRaiseEvent(node) End Function Public Overrides Function GetSyntaxDiagnostics(Optional span As TextSpan? = Nothing, Optional cancellationToken As CancellationToken = Nothing) As ImmutableArray(Of Diagnostic) Throw New NotSupportedException() End Function Public Overrides Function GetDeclarationDiagnostics(Optional span As TextSpan? = Nothing, Optional cancellationToken As CancellationToken = Nothing) As ImmutableArray(Of Diagnostic) Throw New NotSupportedException() End Function Public Overrides Function GetMethodBodyDiagnostics(Optional span As TextSpan? = Nothing, Optional cancellationToken As CancellationToken = Nothing) As ImmutableArray(Of Diagnostic) Throw New NotSupportedException() End Function Public Overrides Function GetDiagnostics(Optional span As TextSpan? = Nothing, Optional cancellationToken As CancellationToken = Nothing) As ImmutableArray(Of Diagnostic) Throw New NotSupportedException() End Function Public Overloads Overrides Function GetDeclaredSymbol(declarationSyntax As TypeStatementSyntax, Optional cancellationToken As CancellationToken = Nothing) As INamedTypeSymbol Return _memberModel.GetDeclaredSymbol(declarationSyntax, cancellationToken) End Function Public Overloads Overrides Function GetDeclaredSymbol(declarationSyntax As EnumStatementSyntax, Optional cancellationToken As CancellationToken = Nothing) As INamedTypeSymbol Return _memberModel.GetDeclaredSymbol(declarationSyntax, cancellationToken) End Function Public Overloads Overrides Function GetDeclaredSymbol(declarationSyntax As NamespaceStatementSyntax, Optional cancellationToken As CancellationToken = Nothing) As INamespaceSymbol Return _memberModel.GetDeclaredSymbol(declarationSyntax, cancellationToken) End Function Friend Overloads Overrides Function GetDeclaredSymbol(declarationSyntax As MethodBaseSyntax, Optional cancellationToken As CancellationToken = Nothing) As ISymbol Return _memberModel.GetDeclaredSymbol(declarationSyntax, cancellationToken) End Function Public Overloads Overrides Function GetDeclaredSymbol(parameter As ParameterSyntax, Optional cancellationToken As CancellationToken = Nothing) As IParameterSymbol Return _memberModel.GetDeclaredSymbol(parameter, cancellationToken) End Function Public Overloads Overrides Function GetDeclaredSymbol(declarationSyntax As SimpleImportsClauseSyntax, Optional cancellationToken As CancellationToken = Nothing) As IAliasSymbol Return _memberModel.GetDeclaredSymbol(declarationSyntax, cancellationToken) End Function Public Overloads Overrides Function GetDeclaredSymbol(typeParameter As TypeParameterSyntax, Optional cancellationToken As CancellationToken = Nothing) As ITypeParameterSymbol Return _memberModel.GetDeclaredSymbol(typeParameter, cancellationToken) End Function Public Overrides Function GetDeclaredSymbol(declarationSyntax As EnumMemberDeclarationSyntax, Optional cancellationToken As CancellationToken = Nothing) As IFieldSymbol Return _memberModel.GetDeclaredSymbol(declarationSyntax, cancellationToken) End Function Public Overrides Function GetDeclaredSymbol(identifierSyntax As ModifiedIdentifierSyntax, Optional cancellationToken As CancellationToken = Nothing) As ISymbol Return _memberModel.GetDeclaredSymbol(identifierSyntax, cancellationToken) End Function Public Overrides Function GetDeclaredSymbol(anonymousObjectCreationExpressionSyntax As AnonymousObjectCreationExpressionSyntax, Optional cancellationToken As CancellationToken = Nothing) As INamedTypeSymbol Return _memberModel.GetDeclaredSymbol(anonymousObjectCreationExpressionSyntax, cancellationToken) End Function Public Overrides Function GetDeclaredSymbol(fieldInitializerSyntax As FieldInitializerSyntax, Optional cancellationToken As System.Threading.CancellationToken = Nothing) As IPropertySymbol Return _memberModel.GetDeclaredSymbol(fieldInitializerSyntax, cancellationToken) End Function Public Overrides Function GetDeclaredSymbol(rangeVariableSyntax As CollectionRangeVariableSyntax, Optional cancellationToken As CancellationToken = Nothing) As IRangeVariableSymbol Return _memberModel.GetDeclaredSymbol(rangeVariableSyntax, cancellationToken) End Function Public Overrides Function GetDeclaredSymbol(rangeVariableSyntax As ExpressionRangeVariableSyntax, Optional cancellationToken As CancellationToken = Nothing) As IRangeVariableSymbol Return _memberModel.GetDeclaredSymbol(rangeVariableSyntax, cancellationToken) End Function Public Overrides Function GetDeclaredSymbol(rangeVariableSyntax As AggregationRangeVariableSyntax, Optional cancellationToken As CancellationToken = Nothing) As IRangeVariableSymbol Return _memberModel.GetDeclaredSymbol(rangeVariableSyntax, cancellationToken) End Function Friend Overrides Function GetDeclaredSymbols(declarationSyntax As FieldDeclarationSyntax, Optional cancellationToken As CancellationToken = Nothing) As ImmutableArray(Of ISymbol) Return _memberModel.GetDeclaredSymbols(declarationSyntax, cancellationToken) End Function Friend Overrides Function GetForEachStatementInfoWorker(node As ForEachBlockSyntax) As ForEachStatementInfo Return _memberModel.GetForEachStatementInfoWorker(node) End Function Friend Overrides Function GetAttributeSymbolInfo(attribute As AttributeSyntax, Optional cancellationToken As CancellationToken = Nothing) As SymbolInfo Return _memberModel.GetAttributeSymbolInfo(attribute, cancellationToken) End Function Friend Overrides Function GetAttributeTypeInfo(attribute As AttributeSyntax, Optional cancellationToken As CancellationToken = Nothing) As VisualBasicTypeInfo Return _memberModel.GetAttributeTypeInfo(attribute, cancellationToken) End Function Friend Overrides Function GetAttributeMemberGroup(attribute As AttributeSyntax, Optional cancellationToken As CancellationToken = Nothing) As ImmutableArray(Of Symbol) Return _memberModel.GetAttributeMemberGroup(attribute, cancellationToken) End Function Friend Overrides Function GetExpressionSymbolInfo(node As ExpressionSyntax, options As SymbolInfoOptions, Optional cancellationToken As CancellationToken = Nothing) As SymbolInfo Return _memberModel.GetExpressionSymbolInfo(node, options, cancellationToken) End Function Friend Overrides Function GetOperationWorker(node As VisualBasicSyntaxNode, cancellationToken As CancellationToken) As IOperation Return _memberModel.GetOperationWorker(node, cancellationToken) End Function Friend Overrides Function GetExpressionTypeInfo(node As ExpressionSyntax, Optional cancellationToken As CancellationToken = Nothing) As VisualBasicTypeInfo Return _memberModel.GetExpressionTypeInfo(node, cancellationToken) End Function Friend Overrides Function GetExpressionMemberGroup(node As ExpressionSyntax, Optional cancellationToken As CancellationToken = Nothing) As ImmutableArray(Of Symbol) Return _memberModel.GetExpressionMemberGroup(node, cancellationToken) End Function Friend Overrides Function GetExpressionConstantValue(node As ExpressionSyntax, Optional cancellationToken As CancellationToken = Nothing) As ConstantValue Return _memberModel.GetExpressionConstantValue(node, cancellationToken) End Function Friend Overrides Function GetCollectionInitializerAddSymbolInfo(collectionInitializer As ObjectCreationExpressionSyntax, node As ExpressionSyntax, Optional cancellationToken As CancellationToken = Nothing) As SymbolInfo Return _memberModel.GetCollectionInitializerAddSymbolInfo(collectionInitializer, node, cancellationToken) End Function Friend Overrides Function GetCrefReferenceSymbolInfo(crefReference As CrefReferenceSyntax, options As VBSemanticModel.SymbolInfoOptions, Optional cancellationToken As CancellationToken = Nothing) As SymbolInfo Return _memberModel.GetCrefReferenceSymbolInfo(crefReference, options, cancellationToken) End Function Friend Overrides Function GetQueryClauseSymbolInfo(node As QueryClauseSyntax, Optional cancellationToken As System.Threading.CancellationToken = Nothing) As SymbolInfo Return _memberModel.GetQueryClauseSymbolInfo(node, cancellationToken) End Function Friend Overrides Function GetLetClauseSymbolInfo(node As ExpressionRangeVariableSyntax, Optional cancellationToken As CancellationToken = Nothing) As SymbolInfo Return _memberModel.GetLetClauseSymbolInfo(node, cancellationToken) End Function Friend Overrides Function GetOrderingSymbolInfo(node As OrderingSyntax, Optional cancellationToken As CancellationToken = Nothing) As SymbolInfo Return _memberModel.GetOrderingSymbolInfo(node, cancellationToken) End Function Friend Overrides Function GetAggregateClauseSymbolInfoWorker(node As AggregateClauseSyntax, Optional cancellationToken As CancellationToken = Nothing) As AggregateClauseSymbolInfo Return _memberModel.GetAggregateClauseSymbolInfoWorker(node, cancellationToken) End Function Friend Overrides Function GetCollectionRangeVariableSymbolInfoWorker(node As CollectionRangeVariableSyntax, Optional cancellationToken As CancellationToken = Nothing) As CollectionRangeVariableSymbolInfo Return _memberModel.GetCollectionRangeVariableSymbolInfoWorker(node, cancellationToken) End Function Friend Overrides Function TryGetSpeculativeSemanticModelCore(parentModel As SyntaxTreeSemanticModel, position As Integer, type As TypeSyntax, bindingOption As SpeculativeBindingOption, <Out> ByRef speculativeModel As PublicSemanticModel) As Boolean Throw ExceptionUtilities.Unreachable() End Function Friend Overrides Function TryGetSpeculativeSemanticModelCore(parentModel As SyntaxTreeSemanticModel, position As Integer, rangeArgument As RangeArgumentSyntax, <Out> ByRef speculativeModel As PublicSemanticModel) As Boolean Throw ExceptionUtilities.Unreachable() End Function Friend Overrides Function GetAwaitExpressionInfoWorker(awaitExpression As AwaitExpressionSyntax, Optional cancellationToken As CancellationToken = Nothing) As AwaitExpressionInfo Return _memberModel.GetAwaitExpressionInfoWorker(awaitExpression, cancellationToken) End Function Friend Overrides Function Bind(binder As Binder, node As SyntaxNode, diagnostics As BindingDiagnosticBag) As BoundNode Return _memberModel.Bind(binder, node, diagnostics) End Function Friend Overrides Function TryGetSpeculativeSemanticModelCore(parentModel As SyntaxTreeSemanticModel, position As Integer, initializer As EqualsValueSyntax, <Out> ByRef speculativeModel As PublicSemanticModel) As Boolean Throw ExceptionUtilities.Unreachable() End Function Friend Overrides Function TryGetSpeculativeSemanticModelCore(parentModel As SyntaxTreeSemanticModel, position As Integer, statement As ExecutableStatementSyntax, <Out> ByRef speculativeModel As PublicSemanticModel) As Boolean Throw ExceptionUtilities.Unreachable() End Function Friend Overrides Function TryGetSpeculativeSemanticModelForMethodBodyCore(parentModel As SyntaxTreeSemanticModel, position As Integer, method As MethodBlockBaseSyntax, <Out> ByRef speculativeModel As PublicSemanticModel) As Boolean Throw ExceptionUtilities.Unreachable() End Function End Class End Namespace