// 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}";
}
}