// dnlib: See LICENSE.txt for more info using System.Collections.Generic; using System.Diagnostics; namespace dnlib.DotNet.Pdb { /// /// Import scope /// public sealed class PdbImportScope : IHasCustomDebugInformation { readonly IList imports = new List(); /// /// Constructor /// public PdbImportScope() { } /// /// Gets/sets the parent import scope /// public PdbImportScope Parent { get; set; } /// /// Gets all imports /// public IList Imports => imports; /// /// true if is not empty /// public bool HasImports => imports.Count > 0; /// public int HasCustomDebugInformationTag => 26; /// public bool HasCustomDebugInfos => CustomDebugInfos.Count > 0; /// /// Gets all custom debug infos /// public IList CustomDebugInfos => customDebugInfos; readonly IList customDebugInfos = new List(); } /// /// Import kind /// public enum PdbImportDefinitionKind { #pragma warning disable 1591 // Missing XML comment for publicly visible type or member ImportNamespace, ImportAssemblyNamespace, ImportType, ImportXmlNamespace, ImportAssemblyReferenceAlias, AliasAssemblyReference, AliasNamespace, AliasAssemblyNamespace, AliasType, #pragma warning restore 1591 // Missing XML comment for publicly visible type or member } /// /// PDB import base class /// public abstract class PdbImport { /// /// Gets the import kind /// public abstract PdbImportDefinitionKind Kind { get; } internal abstract void PreventNewClasses(); } /// /// Import namespace /// [DebuggerDisplay("{GetDebuggerString(),nq}")] public sealed class PdbImportNamespace : PdbImport { /// /// Returns /// public sealed override PdbImportDefinitionKind Kind => PdbImportDefinitionKind.ImportNamespace; /// /// Gets the target namespace /// public string TargetNamespace { get; set; } /// /// Constructor /// public PdbImportNamespace() { } /// /// Constructor /// /// public PdbImportNamespace(string targetNamespace) => TargetNamespace = targetNamespace; internal sealed override void PreventNewClasses() { } string GetDebuggerString() => $"{Kind}: {TargetNamespace}"; } /// /// Import assembly, namespace /// [DebuggerDisplay("{GetDebuggerString(),nq}")] public sealed class PdbImportAssemblyNamespace : PdbImport { /// /// Returns /// public sealed override PdbImportDefinitionKind Kind => PdbImportDefinitionKind.ImportAssemblyNamespace; /// /// Gets the target assembly /// public AssemblyRef TargetAssembly { get; set; } /// /// Gets the target namespace /// public string TargetNamespace { get; set; } /// /// Constructor /// public PdbImportAssemblyNamespace() { } /// /// Constructor /// /// /// public PdbImportAssemblyNamespace(AssemblyRef targetAssembly, string targetNamespace) { TargetAssembly = targetAssembly; TargetNamespace = targetNamespace; } internal sealed override void PreventNewClasses() { } string GetDebuggerString() => $"{Kind}: {TargetAssembly} {TargetNamespace}"; } /// /// Import type /// [DebuggerDisplay("{GetDebuggerString(),nq}")] public sealed class PdbImportType : PdbImport { /// /// Returns /// public sealed override PdbImportDefinitionKind Kind => PdbImportDefinitionKind.ImportType; /// /// Gets the target type /// public ITypeDefOrRef TargetType { get; set; } /// /// Constructor /// public PdbImportType() { } /// /// Constructor /// /// public PdbImportType(ITypeDefOrRef targetType) => TargetType = targetType; internal sealed override void PreventNewClasses() { } string GetDebuggerString() => $"{Kind}: {TargetType}"; } /// /// Import xml namespace /// [DebuggerDisplay("{GetDebuggerString(),nq}")] public sealed class PdbImportXmlNamespace : PdbImport { /// /// Returns /// public sealed override PdbImportDefinitionKind Kind => PdbImportDefinitionKind.ImportXmlNamespace; /// /// Gets the alias /// public string Alias { get; set; } /// /// Gets the target namespace /// public string TargetNamespace { get; set; } /// /// Constructor /// public PdbImportXmlNamespace() { } /// /// Constructor /// /// /// public PdbImportXmlNamespace(string alias, string targetNamespace) { Alias = alias; TargetNamespace = targetNamespace; } internal sealed override void PreventNewClasses() { } string GetDebuggerString() => $"{Kind}: {Alias} = {TargetNamespace}"; } /// /// Import assembly reference alias /// [DebuggerDisplay("{GetDebuggerString(),nq}")] public sealed class PdbImportAssemblyReferenceAlias : PdbImport { /// /// Returns /// public sealed override PdbImportDefinitionKind Kind => PdbImportDefinitionKind.ImportAssemblyReferenceAlias; /// /// Gets the alias /// public string Alias { get; set; } /// /// Constructor /// public PdbImportAssemblyReferenceAlias() { } /// /// Constructor /// /// public PdbImportAssemblyReferenceAlias(string alias) => Alias = alias; internal sealed override void PreventNewClasses() { } string GetDebuggerString() => $"{Kind}: {Alias}"; } /// /// Alias assembly reference /// [DebuggerDisplay("{GetDebuggerString(),nq}")] public sealed class PdbAliasAssemblyReference : PdbImport { /// /// Returns /// public sealed override PdbImportDefinitionKind Kind => PdbImportDefinitionKind.AliasAssemblyReference; /// /// Gets the alias /// public string Alias { get; set; } /// /// Gets the target assembly /// public AssemblyRef TargetAssembly { get; set; } /// /// Constructor /// public PdbAliasAssemblyReference() { } /// /// Constructor /// /// /// public PdbAliasAssemblyReference(string alias, AssemblyRef targetAssembly) { Alias = alias; TargetAssembly = targetAssembly; } internal sealed override void PreventNewClasses() { } string GetDebuggerString() => $"{Kind}: {Alias} = {TargetAssembly}"; } /// /// Alias namespace /// [DebuggerDisplay("{GetDebuggerString(),nq}")] public sealed class PdbAliasNamespace : PdbImport { /// /// Returns /// public sealed override PdbImportDefinitionKind Kind => PdbImportDefinitionKind.AliasNamespace; /// /// Gets the alias /// public string Alias { get; set; } /// /// Gets the target namespace /// public string TargetNamespace { get; set; } /// /// Constructor /// public PdbAliasNamespace() { } /// /// Constructor /// /// /// public PdbAliasNamespace(string alias, string targetNamespace) { Alias = alias; TargetNamespace = targetNamespace; } internal sealed override void PreventNewClasses() { } string GetDebuggerString() => $"{Kind}: {Alias} = {TargetNamespace}"; } /// /// Alias assembly namespace /// [DebuggerDisplay("{GetDebuggerString(),nq}")] public sealed class PdbAliasAssemblyNamespace : PdbImport { /// /// Returns /// public sealed override PdbImportDefinitionKind Kind => PdbImportDefinitionKind.AliasAssemblyNamespace; /// /// Gets the alias /// public string Alias { get; set; } /// /// Gets the target assembly /// public AssemblyRef TargetAssembly { get; set; } /// /// Gets the target namespace /// public string TargetNamespace { get; set; } /// /// Constructor /// public PdbAliasAssemblyNamespace() { } /// /// Constructor /// /// /// /// public PdbAliasAssemblyNamespace(string alias, AssemblyRef targetAssembly, string targetNamespace) { Alias = alias; TargetAssembly = targetAssembly; TargetNamespace = targetNamespace; } internal sealed override void PreventNewClasses() { } string GetDebuggerString() => $"{Kind}: {Alias} = {TargetAssembly} {TargetNamespace}"; } /// /// Alias type /// [DebuggerDisplay("{GetDebuggerString(),nq}")] public sealed class PdbAliasType : PdbImport { /// /// Returns /// public sealed override PdbImportDefinitionKind Kind => PdbImportDefinitionKind.AliasType; /// /// Gets the alias /// public string Alias { get; set; } /// /// Gets the target type /// public ITypeDefOrRef TargetType { get; set; } /// /// Constructor /// public PdbAliasType() { } /// /// Constructor /// /// /// public PdbAliasType(string alias, ITypeDefOrRef targetType) { Alias = alias; TargetType = targetType; } internal sealed override void PreventNewClasses() { } string GetDebuggerString() => $"{Kind}: {Alias} = {TargetType}"; } }