| File: Language\TagHelperDescriptorBuilder.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; using System.Collections.Immutable; using Microsoft.CodeAnalysis; namespace Microsoft.AspNetCore.Razor.Language; public sealed partial class TagHelperDescriptorBuilder : TagHelperObjectBuilder<TagHelperDescriptor> { private TagHelperFlags _flags; private TagHelperKind _kind; private string? _name; private string? _assemblyName; private TypeNameObject _typeNameObject; private DocumentationObject _documentationObject; private MetadataObject? _metadataObject; private TagHelperDescriptorBuilder() { } internal TagHelperDescriptorBuilder(TagHelperKind kind, string name, string assemblyName) : this() { _kind = kind; _name = name ?? throw new ArgumentNullException(nameof(name)); _assemblyName = assemblyName ?? throw new ArgumentNullException(nameof(assemblyName)); } public static TagHelperDescriptorBuilder Create(string name, string assemblyName) => new(TagHelperKind.ITagHelper, name, assemblyName); public static TagHelperDescriptorBuilder Create(TagHelperKind kind, string name, string assemblyName) => new(kind, name, assemblyName); public TagHelperKind Kind => _kind; public RuntimeKind RuntimeKind { get; set; } public string Name => _name.AssumeNotNull(); public string AssemblyName => _assemblyName.AssumeNotNull(); public string? DisplayName { get; set; } public string? TagOutputHint { get; set; } public string? TypeName { get => _typeNameObject.FullName; set => _typeNameObject = TypeNameObject.From(value); } public string? TypeNamespace => _typeNameObject.Namespace; public string? TypeNameIdentifier => _typeNameObject.Name; public bool CaseSensitive { get => _flags.IsFlagSet(TagHelperFlags.CaseSensitive); set => _flags.UpdateFlag(TagHelperFlags.CaseSensitive, value); } public bool IsFullyQualifiedNameMatch { get => _flags.IsFlagSet(TagHelperFlags.IsFullyQualifiedNameMatch); set => _flags.UpdateFlag(TagHelperFlags.IsFullyQualifiedNameMatch, value); } public bool ClassifyAttributesOnly { get => _flags.IsFlagSet(TagHelperFlags.ClassifyAttributesOnly); set => _flags.UpdateFlag(TagHelperFlags.ClassifyAttributesOnly, value); } public string? Documentation { get => _documentationObject.GetText(); set => _documentationObject = new(value); } public void SetMetadata(MetadataObject metadataObject) { _metadataObject = metadataObject; } public MetadataObject MetadataObject => _metadataObject ?? MetadataObject.None; internal void SetTypeName(TypeNameObject typeName) { _typeNameObject = typeName; } public void SetTypeName(string fullName, string? typeNamespace, string? typeNameIdentifier) { _typeNameObject = TypeNameObject.From(fullName, typeNamespace, typeNameIdentifier); } public void SetTypeName(INamedTypeSymbol namedType) { _typeNameObject = TypeNameObject.From(namedType); } public TagHelperObjectBuilderCollection<AllowedChildTagDescriptor, AllowedChildTagDescriptorBuilder> AllowedChildTags { get; } = new(AllowedChildTagDescriptorBuilder.Pool); public TagHelperObjectBuilderCollection<BoundAttributeDescriptor, BoundAttributeDescriptorBuilder> BoundAttributes { get; } = new(BoundAttributeDescriptorBuilder.Pool); public TagHelperObjectBuilderCollection<TagMatchingRuleDescriptor, TagMatchingRuleDescriptorBuilder> TagMatchingRules { get; } = new(TagMatchingRuleDescriptorBuilder.Pool); public void AllowChildTag(Action<AllowedChildTagDescriptorBuilder> configure) { if (configure == null) { throw new ArgumentNullException(nameof(configure)); } var builder = AllowedChildTagDescriptorBuilder.GetInstance(this); configure(builder); AllowedChildTags.Add(builder); } public void BindAttribute(Action<BoundAttributeDescriptorBuilder> configure) { if (configure == null) { throw new ArgumentNullException(nameof(configure)); } var builder = BoundAttributeDescriptorBuilder.GetInstance(this); configure(builder); BoundAttributes.Add(builder); } public void TagMatchingRule(Action<TagMatchingRuleDescriptorBuilder> configure) { if (configure == null) { throw new ArgumentNullException(nameof(configure)); } var builder = TagMatchingRuleDescriptorBuilder.GetInstance(this); configure(builder); TagMatchingRules.Add(builder); } internal void SetDocumentation(string? text) { _documentationObject = new(text); } internal void SetDocumentation(DocumentationDescriptor? documentation) { _documentationObject = new(documentation); } private protected override TagHelperDescriptor BuildCore(ImmutableArray<RazorDiagnostic> diagnostics) { return new TagHelperDescriptor( _flags, Kind, RuntimeKind, Name, AssemblyName, GetDisplayName(), _typeNameObject, _documentationObject, TagOutputHint, TagMatchingRules.ToImmutable(), BoundAttributes.ToImmutable(), AllowedChildTags.ToImmutable(), MetadataObject, diagnostics); } internal string GetDisplayName() { return DisplayName ?? TypeName ?? Name; } }