| File: Language\BoundAttributeParameterDescriptor.cs | Web Access |
| Project: src\roslyn\src\Razor\src\Compiler\Microsoft.CodeAnalysis.Razor.Compiler\src\Microsoft.CodeAnalysis.Razor.Compiler.csproj (Microsoft.CodeAnalysis.Razor.Compiler) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Collections.Immutable; using System.Diagnostics; using Microsoft.AspNetCore.Razor.Utilities; namespace Microsoft.AspNetCore.Razor.Language; public sealed class BoundAttributeParameterDescriptor : TagHelperObject<BoundAttributeParameterDescriptor> { private readonly BoundAttributeParameterFlags _flags; private BoundAttributeDescriptor? _parent; private string? _displayName; public BoundAttributeParameterFlags Flags => _flags; public string Name { get; } public string PropertyName { get; } public string TypeName => TypeNameObject.FullName.AssumeNotNull(); public string DisplayName => _displayName ??= ":" + Name; public string? Documentation => DocumentationObject.GetText(); internal TypeNameObject TypeNameObject { get; } internal DocumentationObject DocumentationObject { get; } public bool CaseSensitive => _flags.IsFlagSet(BoundAttributeParameterFlags.CaseSensitive); public bool IsEnum => _flags.IsFlagSet(BoundAttributeParameterFlags.IsEnum); public bool IsStringProperty => TypeNameObject.IsString; public bool IsBooleanProperty => TypeNameObject.IsBoolean; public bool BindAttributeGetSet => _flags.IsFlagSet(BoundAttributeParameterFlags.BindAttributeGetSet); internal BoundAttributeParameterDescriptor( BoundAttributeParameterFlags flags, string name, string propertyName, TypeNameObject typeNameObject, DocumentationObject documentationObject, ImmutableArray<RazorDiagnostic> diagnostics) : base(diagnostics) { _flags = flags; Name = name; PropertyName = propertyName; TypeNameObject = typeNameObject; DocumentationObject = documentationObject; } private protected override void BuildChecksum(in Checksum.Builder builder) { builder.Append((byte)_flags); builder.Append(Name); builder.Append(PropertyName); TypeNameObject.AppendToChecksum(in builder); DocumentationObject.AppendToChecksum(in builder); } public BoundAttributeDescriptor Parent => _parent ?? ThrowHelper.ThrowInvalidOperationException<BoundAttributeDescriptor>(Resources.Parent_has_not_been_set); internal void SetParent(BoundAttributeDescriptor parent) { Debug.Assert(parent != null); Debug.Assert(_parent == null); _parent = parent; } public override string ToString() => DisplayName; }