| File: Symbols\EmbeddedSymbols\EmbeddedSymbolManager.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.Text Imports System.Threading Imports Microsoft.CodeAnalysis.Text Imports Microsoft.CodeAnalysis.VisualBasic.Symbols Imports Microsoft.CodeAnalysis.VisualBasic.Syntax Namespace Microsoft.CodeAnalysis.VisualBasic.Symbols ''' <summary> ''' Manages symbols from automatically embedded syntax trees. ''' </summary> Partial Friend NotInheritable Class EmbeddedSymbolManager Private Shared s_embeddedSyntax As SyntaxTree = Nothing Private Shared s_vbCoreSyntax As SyntaxTree = Nothing Private Shared s_internalXmlHelperSyntax As SyntaxTree = Nothing Private Shared Function ParseResourceText(text As String) As SyntaxTree Return VisualBasicSyntaxTree.ParseText(SourceText.From(text, Encoding.UTF8, SourceHashAlgorithms.Default)) End Function Friend Shared Function GetEmbeddedKind(tree As SyntaxTree) As EmbeddedSymbolKind Debug.Assert(tree IsNot Nothing) If tree Is Nothing Then Return EmbeddedSymbolKind.None ElseIf tree Is s_embeddedSyntax Then Return EmbeddedSymbolKind.EmbeddedAttribute ElseIf tree Is s_vbCoreSyntax Then Return EmbeddedSymbolKind.VbCore ElseIf tree Is s_internalXmlHelperSyntax Then Return EmbeddedSymbolKind.XmlHelper Else Return EmbeddedSymbolKind.None End If End Function Friend Shared Function GetEmbeddedTree(kind As EmbeddedSymbolKind) As SyntaxTree Select Case kind Case EmbeddedSymbolKind.EmbeddedAttribute Return EmbeddedSyntax Case EmbeddedSymbolKind.VbCore Return VbCoreSyntaxTree Case EmbeddedSymbolKind.XmlHelper Return InternalXmlHelperSyntax Case Else Throw ExceptionUtilities.UnexpectedValue(kind) End Select End Function Public Shared ReadOnly Property EmbeddedSyntax As SyntaxTree Get If s_embeddedSyntax Is Nothing Then Interlocked.CompareExchange(s_embeddedSyntax, ParseResourceText(EmbeddedResources.Embedded), Nothing) If s_embeddedSyntax.GetDiagnostics().Any() Then Throw ExceptionUtilities.Unreachable End If End If Return s_embeddedSyntax End Get End Property ''' <summary> ''' Lazily created parsed representation of VB Core content ''' </summary> Public Shared ReadOnly Property VbCoreSyntaxTree As SyntaxTree Get If s_vbCoreSyntax Is Nothing Then Interlocked.CompareExchange(s_vbCoreSyntax, ParseResourceText(EmbeddedResources.VbCoreSourceText), Nothing) If s_vbCoreSyntax.GetDiagnostics().Any() Then Throw ExceptionUtilities.Unreachable End If End If Return s_vbCoreSyntax End Get End Property Public Shared ReadOnly Property InternalXmlHelperSyntax As SyntaxTree Get If s_internalXmlHelperSyntax Is Nothing Then Interlocked.CompareExchange(s_internalXmlHelperSyntax, ParseResourceText(EmbeddedResources.InternalXmlHelper), Nothing) If s_internalXmlHelperSyntax.GetDiagnostics().Any() Then Throw ExceptionUtilities.Unreachable End If End If Return s_internalXmlHelperSyntax End Get End Property End Class End Namespace