// Copyright Epic Games, Inc. All Rights Reserved. using System.Collections.Generic; using EpicGames.Core; using Microsoft.Extensions.Logging; namespace EpicGames.Horde.Issues.Handlers { /// /// Instance of a particular compile error /// [IssueHandler] public class SymbolIssueHandler : IssueHandler { const string EventIdName = "EventId"; readonly List _issues = new List(); /// public override int Priority => 10; /// /// Determines if the given event id matches /// /// The event id to compare /// True if the given event id matches public static bool IsMatchingEventId(EventId eventId) { return eventId == KnownLogEvents.Linker_UndefinedSymbol || eventId == KnownLogEvents.Linker_DuplicateSymbol || eventId == KnownLogEvents.Linker; } /// /// Determines if an event should be masked by this /// /// /// static bool IsMaskedEventId(EventId eventId) { return eventId == KnownLogEvents.ExitCode || eventId == KnownLogEvents.Systemic_Xge_BuildFailed; } /// public override bool HandleEvent(IssueEvent issueEvent) { if (issueEvent.EventId != null) { EventId eventId = issueEvent.EventId.Value; if (IsMatchingEventId(eventId)) { IssueEventGroup issue = new IssueEventGroup("Symbol", "{LegacySymbolIssueHandler}", IssueChangeFilter.Code); issue.Events.Add(issueEvent); issue.Keys.AddSymbols(issueEvent); issue.Metadata.Add(EventIdName, eventId.Id.ToString()); if (issue.Keys.Count > 0) { _issues.Add(issue); issueEvent.AuditLogger?.LogDebug("{IssueType} issue added for event: '{Event}'", issue.Type, issueEvent.Render()); return true; } if (_issues.Count > 0) { return true; } } else if (_issues.Count > 0 && IsMaskedEventId(eventId)) { return true; } } return false; } /// public override IEnumerable GetIssues() => _issues; } }