protected override void LoadChildren() { var module = LoadedAssembly.GetPEFileOrNull(); if (module == null) { // if we crashed on loading, then we don't have any children return; } typeSystem = LoadedAssembly.GetTypeSystemOrNull(DecompilerTypeSystem.GetOptions(new DecompilationOptions().DecompilerSettings)); var assembly = (MetadataModule)typeSystem.MainModule; var metadata = module.Metadata; this.Children.Add(new Metadata.MetadataTreeNode(module, this)); Decompiler.DebugInfo.IDebugInfoProvider debugInfo = LoadedAssembly.GetDebugInfoOrNull(); if (debugInfo is Decompiler.PdbProvider.PortableDebugInfoProvider ppdb) { this.Children.Add(new Metadata.DebugMetadataTreeNode(module, ppdb.IsEmbedded, ppdb.Provider.GetMetadataReader(), this)); } this.Children.Add(new ReferenceFolderTreeNode(module, this)); if (module.Resources.Any()) { this.Children.Add(new ResourceListTreeNode(module)); } foreach (NamespaceTreeNode ns in namespaces.Values) { ns.Children.Clear(); } foreach (var type in assembly.TopLevelTypeDefinitions.OrderBy(t => t.ReflectionName, NaturalStringComparer.Instance)) { var escapedNamespace = Language.EscapeName(type.Namespace); if (!namespaces.TryGetValue(type.Namespace, out NamespaceTreeNode ns)) { ns = new NamespaceTreeNode(escapedNamespace); namespaces.Add(type.Namespace, ns); } TypeTreeNode node = new TypeTreeNode(type, this); typeDict[(TypeDefinitionHandle)type.MetadataToken] = node; ns.Children.Add(node); } foreach (NamespaceTreeNode ns in namespaces.Values.OrderBy(n => n.Name, NaturalStringComparer.Instance)) { if (ns.Children.Count > 0) { this.Children.Add(ns); } } }
public static ICompilation GetTypeSystemWithCurrentOptionsOrNull(this PEFile file) { return(GetLoadedAssembly(file).GetTypeSystemOrNull(DecompilerTypeSystem.GetOptions(new DecompilationOptions().DecompilerSettings))); }
public static ICompilation?GetTypeSystemWithDecompilerSettingsOrNull(this PEFile file, DecompilerSettings settings) { return(GetLoadedAssembly(file).GetTypeSystemOrNull(DecompilerTypeSystem.GetOptions(settings))); }