| File: SymbolDisplay\SymbolDisplayVisitor_Constants.cs | Web Access |
| Project: src\roslyn\src\Compilers\CSharp\Portable\Microsoft.CodeAnalysis.CSharp.csproj (Microsoft.CodeAnalysis.CSharp) |
// 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. using System.Diagnostics; using System.Reflection; namespace Microsoft.CodeAnalysis.CSharp { internal partial class SymbolDisplayVisitor { private void AddConstantValue(ITypeSymbol type, object? constantValue, bool preferNumericValueOrExpandedFlagsForEnum = false) { if (constantValue != null) { AddNonNullConstantValue(type, constantValue, preferNumericValueOrExpandedFlagsForEnum); } else if (type.IsReferenceType || type.TypeKind == TypeKind.Pointer || ITypeSymbolHelpers.IsNullableType(type)) { AddKeyword(SyntaxKind.NullKeyword); } else { AddKeyword(SyntaxKind.DefaultKeyword); if (!Format.MiscellaneousOptions.IncludesOption(SymbolDisplayMiscellaneousOptions.AllowDefaultLiteral)) { AddPunctuation(SyntaxKind.OpenParenToken); type.Accept(this.NotFirstVisitor); AddPunctuation(SyntaxKind.CloseParenToken); } } } protected override void AddExplicitlyCastedLiteralValue(INamedTypeSymbol namedType, SpecialType type, object value) { AddPunctuation(SyntaxKind.OpenParenToken); namedType.Accept(this.NotFirstVisitor); AddPunctuation(SyntaxKind.CloseParenToken); AddLiteralValue(type, value); } protected override void AddLiteralValue(SpecialType type, object value) { Debug.Assert(value.GetType().GetTypeInfo().IsPrimitive || value is string || value is decimal); var valueString = SymbolDisplay.FormatPrimitive(value, quoteStrings: true, useHexadecimalNumbers: false); Debug.Assert(valueString != null); var kind = SymbolDisplayPartKind.NumericLiteral; switch (type) { case SpecialType.System_Boolean: kind = SymbolDisplayPartKind.Keyword; break; case SpecialType.System_String: case SpecialType.System_Char: kind = SymbolDisplayPartKind.StringLiteral; break; } this.Builder.Add(CreatePart(kind, null, valueString)); } protected override void AddBitwiseOr() { AddPunctuation(SyntaxKind.BarToken); } } }