File: Generated\Basic.CompilerLog.Util\Basic.CompilerLog.Util.Impl.BasicGeneratedFilesAnalyzerReference\ProjectItems.g.cs
Project: Microsoft.NET.ProjectData.Tasks.csproj (Microsoft.NET.ProjectData.Tasks)
// <auto-generated/>
// Generated from project-data-schema.json by DataModelSchemaGenerator.

using System.Collections.Generic;

namespace Microsoft.NET.ProjectData.Tasks;

/// <summary>Strongly-typed constants for Data Model item types and metadata.</summary>
internal static class ProjectItems
{
	/// <summary>Source files included in compilation.</summary>
	public static class Compile
	{
		public const string ItemType = "Compile";
		public const string Link = "Link";
	}

	/// <summary>Assembly references.</summary>
	public static class MetadataReference
	{
		public const string ItemType = "MetadataReference";
		public const string Aliases = "aliases";
		public const string EmbedInteropTypes = "embedInteropTypes";
	}

	/// <summary>Roslyn analyzer assemblies.</summary>
	public const string AnalyzerReference = "AnalyzerReference";

	/// <summary>EditorConfig and global analyzer config files.</summary>
	public const string AnalyzerConfigFile = "AnalyzerConfigFile";

	/// <summary>Additional files passed to analyzers.</summary>
	public const string AdditionalFile = "AdditionalFile";

	/// <summary>Project-to-project references.</summary>
	public static class ProjectReference
	{
		public const string ItemType = "ProjectReference";
		public const string ReferenceOutputAssembly = "ReferenceOutputAssembly";
	}

	/// <summary>Compiler command-line arguments.</summary>
	public const string CommandLineArgument = "CommandLineArgument";

	/// <summary>Embedded resource files (.resx, etc.).</summary>
	public static class EmbeddedResource
	{
		public const string ItemType = "EmbeddedResource";
		public const string Generator = "Generator";
		public const string LastGenOutput = "LastGenOutput";
		public const string CustomToolNamespace = "CustomToolNamespace";
	}

	public static readonly string[] AllItemTypes = ["Compile", "MetadataReference", "AnalyzerReference", "AnalyzerConfigFile", "AdditionalFile", "ProjectReference", "CommandLineArgument", "EmbeddedResource"];

	/// <summary>Item types that must be present (even if empty) in every valid snapshot.</summary>
	public static readonly string[] RequiredItemTypes = ["Compile", "MetadataReference", "AnalyzerReference", "ProjectReference", "CommandLineArgument"];

	/// <summary>
	/// Every metadata key the writer can emit on any item (the union across all item
	/// types). Used by forward-compatibility preservation to tell a known <c>@metadata</c>
	/// line from one written by a newer version that must be carried through losslessly.
	/// </summary>
	public static readonly string[] AllMetadata = ["Link", "aliases", "embedInteropTypes", "ReferenceOutputAssembly", "Generator", "LastGenOutput", "CustomToolNamespace"];

	/// <summary>
	/// Metadata keys the writer can emit, grouped by the item type that carries them (NOT a
	/// flattened union). Forward-compatibility preservation uses this to decide what is
	/// "known" <em>per item type</em>, so a newer version that reuses an existing metadata
	/// name on a different item type is still treated as unknown and carried through losslessly.
	/// </summary>
	public static readonly Dictionary<string, string[]> MetadataByItemType = new(System.StringComparer.Ordinal)
	{
		["Compile"] = ["Link"],
		["MetadataReference"] = ["aliases", "embedInteropTypes"],
		["ProjectReference"] = ["ReferenceOutputAssembly"],
		["EmbeddedResource"] = ["Generator", "LastGenOutput", "CustomToolNamespace"],
	};
}