| File: BuildCheck\Infrastructure\IBuildCheckManager.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 System.Diagnostics.CodeAnalysis; using Microsoft.Build.BackEnd.Logging; using Microsoft.Build.Experimental.BuildCheck.Acquisition; using Microsoft.Build.Framework; namespace Microsoft.Build.Experimental.BuildCheck; /// <summary> /// Enumerates the different data sources used in build check operations. /// </summary> internal enum BuildCheckDataSource { /// <summary> /// The data source is based on event arguments. /// </summary> EventArgs, /// <summary> /// The data source is based on build execution. /// </summary> BuildExecution, /// <summary> /// Represents the total number of values in the enum, used for indexing purposes. /// </summary> ValuesCount = BuildExecution + 1, } /// <summary> /// The central manager for the BuildCheck - this is the integration point with MSBuild infrastructure. /// </summary> internal interface IBuildCheckManager { void ProcessEvaluationFinishedEventArgs( ICheckContext checksContext, ProjectEvaluationFinishedEventArgs projectEvaluationFinishedEventArgs); void ProcessEnvironmentVariableReadEventArgs( ICheckContext checksContext, EnvironmentVariableReadEventArgs envVariableReadEventArgs); void ProcessTaskStartedEventArgs( ICheckContext checksContext, TaskStartedEventArgs taskStartedEventArgs); void ProcessTaskFinishedEventArgs( ICheckContext checksContext, TaskFinishedEventArgs taskFinishedEventArgs); void ProcessTaskParameterEventArgs( ICheckContext checksContext, TaskParameterEventArgs taskParameterEventArgs); void ProcessBuildFinished(ICheckContext analysisContext); void SetDataSource(BuildCheckDataSource buildCheckDataSource); [RequiresUnreferencedCode("Loads custom build check assemblies from disk and reflects over their types, which is incompatible with trimming.")] void ProcessCheckAcquisition(CheckAcquisitionData acquisitionData, ICheckContext checksContext); void ProcessProjectImportedEventArgs(ICheckContext checkContext, ProjectImportedEventArgs projectImportedEventArgs); BuildCheckTracingData CreateCheckTracingStats(); void FinalizeProcessing(LoggingContext loggingContext); // All those to be called from RequestBuilder, // but as well from the ConnectorLogger - as even if interleaved, it gives the info // to manager about what checks need to be materialized and configuration fetched. // No unloading of checks is yet considered - once loaded it stays for whole build. // Project might be encountered first time in some node, but be already evaluated in another - so StartProjectEvaluation won't happen // - but we still need to know about it, hence the dedicated event. void ProjectFirstEncountered(BuildCheckDataSource buildCheckDataSource, ICheckContext analysisContext, string projectFullPath); void ProcessProjectEvaluationStarted(BuildCheckDataSource buildCheckDataSource, ICheckContext checksContext, string projectFullPath); void EndProjectEvaluation(BuildEventContext buildEventContext); void StartProjectRequest(ICheckContext checksContext, string projectFullPath); void EndProjectRequest(ICheckContext checksContext, string projectFullPath); void Shutdown(); }