| File: BuildCheck\Infrastructure\BuildCheckReplayModeConnector.cs | Web Access |
| Project: src\msbuild\src\Build\Microsoft.Build.csproj (Microsoft.Build) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using Microsoft.Build.BackEnd; using Microsoft.Build.Execution; using Microsoft.Build.Experimental.BuildCheck.Infrastructure; using Microsoft.Build.Framework; using Microsoft.Build.Logging; namespace Microsoft.Build.Experimental.BuildCheck; /// <summary> /// The class that creates an <see cref="IEventSource"/> for binary log replay with BuildCheck enabled. /// </summary> public static class BuildCheckReplayModeConnector { /// <summary> /// Gets merged <see cref="IEventSource"/> for binary log replay with BuildCheck enabled. /// </summary> /// <param name="buildManager"><see cref="BuildManager"/> to get the registered <see cref="IBuildCheckManagerProvider"/> component from.</param> /// <param name="replayEventSource">The initial event source.</param> /// <returns>The merged <see cref="IEventSource"/>. Used for binary log replay.</returns> public static IEventSource GetMergedEventSource( BuildManager buildManager, IEventSource replayEventSource) { buildManager.EnableBuildCheck(); var buildCheckManagerProvider = ((IBuildComponentHost)buildManager) .GetComponent(BuildComponentType.BuildCheckManagerProvider) as IBuildCheckManagerProvider; buildCheckManagerProvider!.Instance.SetDataSource(BuildCheckDataSource.EventArgs); var mergedEventSource = new EventArgsDispatcher(); // Pass the events from replayEventSource to the mergedEventSource replayEventSource.AnyEventRaised += (sender, e) => mergedEventSource.Dispatch(e); // Create BuildCheckBuildEventHandler that passes new events to the mergedEventSource var buildCheckEventHandler = new BuildCheckBuildEventHandler( new CheckDispatchingContextFactory(mergedEventSource), buildCheckManagerProvider.Instance); // Pass the events from replayEventSource to the BuildCheckBuildEventHandler to produce new events replayEventSource.AnyEventRaised += (sender, e) => buildCheckEventHandler.HandleBuildEvent(e); return mergedEventSource; } }