| File: Settings\TemplateMatchInfo.cs | Web Access |
| Project: src\sdk\src\TemplateEngine\Microsoft.TemplateEngine.Edge\Microsoft.TemplateEngine.Edge.csproj (Microsoft.TemplateEngine.Edge) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using Microsoft.TemplateEngine.Abstractions; using Microsoft.TemplateEngine.Edge.Template; namespace Microsoft.TemplateEngine.Edge.Settings { [Obsolete("This implementation is deprecated, use " + nameof(TemplateMatchInfo) + " instead")] internal class TemplateMatchInfoEx : ITemplateMatchInfo { private readonly List<MatchInfo> _matchDisposition; private readonly List<MatchInfo> _dispositionOfDefaults; public TemplateMatchInfoEx(ITemplateInfo info, IReadOnlyList<MatchInfo> matchDispositions) : this(info) { if (matchDispositions != null) { foreach (MatchInfo disposition in matchDispositions) { AddDisposition(disposition); } } } public TemplateMatchInfoEx(ITemplateInfo info) { Info = info; _matchDisposition = new List<MatchInfo>(); _dispositionOfDefaults = new List<MatchInfo>(); } public ITemplateInfo Info { get; } public IReadOnlyList<MatchInfo> MatchDisposition => _matchDisposition; // Stores match info relative to default settings. // These don't have to match for the template to be a match, but they can be used to filter matches // in appropriate situations. // For example, matching or non-matching on the default language should only be used as a final disambiguation. // It shouldn't unconditionally disqualify a match. public IReadOnlyList<MatchInfo> DispositionOfDefaults => _dispositionOfDefaults.ToList(); public bool IsMatch => MatchDisposition.Count > 0 && MatchDisposition.All(x => x.Kind != MatchKind.Mismatch); public bool IsPartialMatch => MatchDisposition.Any(x => x.Kind != MatchKind.Mismatch); public void AddDisposition(MatchInfo newDisposition) { if (newDisposition.Location == MatchLocation.DefaultLanguage) { _dispositionOfDefaults.Add(newDisposition); } else { _matchDisposition.Add(newDisposition); } } } internal class TemplateMatchInfo : Abstractions.TemplateFiltering.ITemplateMatchInfo { private readonly List<Abstractions.TemplateFiltering.MatchInfo> _matchDisposition = new List<Abstractions.TemplateFiltering.MatchInfo>(); internal TemplateMatchInfo(ITemplateInfo info, IReadOnlyList<Abstractions.TemplateFiltering.MatchInfo> matchDispositions) : this(info) { if (matchDispositions != null) { foreach (Abstractions.TemplateFiltering.MatchInfo disposition in matchDispositions) { AddMatchDisposition(disposition); } } } internal TemplateMatchInfo(ITemplateInfo info) { Info = info ?? throw new ArgumentNullException(nameof(info)); } public ITemplateInfo Info { get; } public IReadOnlyList<Abstractions.TemplateFiltering.MatchInfo> MatchDisposition => _matchDisposition; public void AddMatchDisposition(Abstractions.TemplateFiltering.MatchInfo newDisposition) { _matchDisposition.Add(newDisposition); } } }