| File: Compilation\VisualBasicDeterministicKeyBuilder.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.Globalization Namespace Microsoft.CodeAnalysis.VisualBasic Friend NotInheritable Class VisualBasicDeterministicKeyBuilder Inherits DeterministicKeyBuilder Friend Shared ReadOnly Instance As New VisualBasicDeterministicKeyBuilder() Private Sub New() End Sub Protected Overrides Sub WriteParseOptionsCore(writer As JsonWriter, parseOptions As ParseOptions) ' This can happen for SyntaxTree that are constructed via the API. If parseOptions Is Nothing Then Return End If Dim basicOptions = TryCast(parseOptions, VisualBasicParseOptions) If basicOptions Is Nothing Then Throw New InvalidOperationException() End If MyBase.WriteParseOptionsCore(writer, parseOptions) writer.Write("languageVersion", basicOptions.LanguageVersion) writer.Write("specifiedLanguageVersion", basicOptions.SpecifiedLanguageVersion) writer.WriteKey("preprocessorSymbols") writer.WriteObjectStart() For Each pair In basicOptions.PreprocessorSymbols.OrderBy(Function(x, y) StringComparer.Ordinal.Compare(x.Key, y.Key)) Dim value = pair.Value If value Is Nothing Then writer.WriteNull(pair.Key) Continue For End If writer.WriteKey(pair.Key) Dim type = value.GetType() If type = GetType(String) Then writer.Write(CType(value, String)) ElseIf type = GetType(Boolean) Then writer.Write(CType(value, Boolean)) Else Dim formattable = TryCast(value, IFormattable) If formattable IsNot Nothing Then writer.Write(formattable.ToString(Nothing, CultureInfo.InvariantCulture)) Else Throw ExceptionUtilities.UnexpectedValue(value) End If End If Next writer.WriteObjectEnd() End Sub Protected Overrides Sub WriteCompilationOptionsCore(writer As JsonWriter, options As CompilationOptions) Dim basicOptions = TryCast(options, VisualBasicCompilationOptions) If basicOptions Is Nothing Then Throw New InvalidOperationException() End If MyBase.WriteCompilationOptionsCore(writer, options) writer.Write("rootNamespace", basicOptions.RootNamespace) writer.Write("optionStrict", basicOptions.OptionStrict) writer.Write("optionInfer", basicOptions.OptionInfer) writer.Write("optionExplicit", basicOptions.OptionExplicit) writer.Write("optionCompareText", basicOptions.OptionCompareText) writer.Write("embedVbCoreRuntime", basicOptions.EmbedVbCoreRuntime) writer.WriteKey("globalImports") writer.WriteArrayStart() For Each import In basicOptions.GlobalImports writer.WriteObjectStart() writer.Write("name", import.Name) writer.Write("isXmlClause", import.IsXmlClause) writer.WriteObjectEnd() Next writer.WriteArrayEnd() writer.WriteKey("parseOptions") If basicOptions.ParseOptions IsNot Nothing Then WriteParseOptions(writer, basicOptions.ParseOptions) Else writer.WriteNull() End If End Sub End Class End Namespace