| File: Internal\GrammarBuilding\RuleRefElement.cs | Web Access |
| Project: src\runtime\src\libraries\System.Speech\src\System.Speech.csproj (System.Speech) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Speech.Internal.SrgsParser; namespace System.Speech.Internal.GrammarBuilding { [DebuggerDisplay("{DebugSummary}")] internal sealed class RuleRefElement : GrammarBuilderBase { #region Constructors internal RuleRefElement(RuleElement rule) { _rule = rule; } internal RuleRefElement(RuleElement rule, string? semanticKey) { _rule = rule; _semanticKey = semanticKey; } #endregion #region Public Methods public override bool Equals([NotNullWhen(true)] object? obj) { if (obj is not RuleRefElement refObj) { return false; } return _semanticKey == refObj._semanticKey && _rule.Equals(refObj._rule); } public override int GetHashCode() { return base.GetHashCode(); } #endregion #region Internal Methods internal void Add(GrammarBuilderBase item) { _rule.Add(item); } internal override GrammarBuilderBase Clone() { return new RuleRefElement(_rule, _semanticKey); } internal void CloneItems(RuleRefElement builders) { _rule.CloneItems(builders._rule); } internal override IElement CreateElement(IElementFactory elementFactory, IElement parent, IRule? rule, IdentifierCollection ruleIds) { // Create the new rule and add the reference to the item return elementFactory.CreateRuleRef(parent, new Uri("#" + Rule.RuleName, UriKind.Relative), _semanticKey, null); } #endregion #region Internal Properties internal RuleElement Rule { get { return _rule; } } internal override string DebugSummary { get { return "#" + Rule.Name + (_semanticKey != null ? ":" + _semanticKey : ""); } } #endregion #region Private Fields private readonly RuleElement _rule; private readonly string? _semanticKey; #endregion } }