Skip to content

Commit 7ee01ba

Browse files
Remove code duplication from AssemblyTreeNode
1 parent fd285e3 commit 7ee01ba

File tree

1 file changed

+2
-70
lines changed

1 file changed

+2
-70
lines changed

ILSpy/TreeNodes/AssemblyTreeNode.cs

Lines changed: 2 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -217,10 +217,8 @@ protected override void LoadChildren()
217217
switch (loadResult.MetadataFile.Kind)
218218
{
219219
case MetadataFile.MetadataFileKind.PortableExecutable:
220-
LoadChildrenForPEFile(loadResult.MetadataFile);
221-
break;
222220
case MetadataFile.MetadataFileKind.WebCIL:
223-
LoadChildrenForWebCilFile((WebCilFile)loadResult.MetadataFile);
221+
LoadChildrenForExecutableFile(loadResult.MetadataFile);
224222
break;
225223
default:
226224
var metadata = loadResult.MetadataFile;
@@ -244,73 +242,7 @@ protected override void LoadChildren()
244242
}
245243
}
246244

247-
void LoadChildrenForPEFile(MetadataFile module)
248-
{
249-
typeSystem = LoadedAssembly.GetTypeSystemOrNull();
250-
var assembly = (MetadataModule)typeSystem.MainModule;
251-
this.Children.Add(new MetadataTreeNode(module, Resources.Metadata));
252-
Decompiler.DebugInfo.IDebugInfoProvider debugInfo = LoadedAssembly.GetDebugInfoOrNull();
253-
if (debugInfo is PortableDebugInfoProvider ppdb
254-
&& ppdb.GetMetadataReader() is System.Reflection.Metadata.MetadataReader reader)
255-
{
256-
this.Children.Add(new MetadataTreeNode(ppdb.ToMetadataFile(), $"Debug Metadata ({(ppdb.IsEmbedded ? "Embedded" : "From portable PDB")})"));
257-
}
258-
this.Children.Add(new ReferenceFolderTreeNode(module, this));
259-
if (module.Resources.Any())
260-
this.Children.Add(new ResourceListTreeNode(module));
261-
foreach (NamespaceTreeNode ns in namespaces.Values)
262-
{
263-
ns.Children.Clear();
264-
}
265-
namespaces.Clear();
266-
bool useNestedStructure = SettingsService.DisplaySettings.UseNestedNamespaceNodes;
267-
foreach (var type in assembly.TopLevelTypeDefinitions.OrderBy(t => t.ReflectionName, NaturalStringComparer.Instance))
268-
{
269-
var ns = GetOrCreateNamespaceTreeNode(type.Namespace);
270-
TypeTreeNode node = new TypeTreeNode(type, this);
271-
typeDict[(TypeDefinitionHandle)type.MetadataToken] = node;
272-
ns.Children.Add(node);
273-
}
274-
foreach (NamespaceTreeNode ns in namespaces.Values
275-
.Where(ns => ns.Children.Count > 0 && ns.Parent == null)
276-
.OrderBy(n => n.Name, NaturalStringComparer.Instance))
277-
{
278-
this.Children.Add(ns);
279-
SetPublicAPI(ns);
280-
}
281-
282-
NamespaceTreeNode GetOrCreateNamespaceTreeNode(string @namespace)
283-
{
284-
if (!namespaces.TryGetValue(@namespace, out NamespaceTreeNode ns))
285-
{
286-
if (useNestedStructure)
287-
{
288-
int decimalIndex = @namespace.LastIndexOf('.');
289-
if (decimalIndex < 0)
290-
{
291-
var escapedNamespace = Language.EscapeName(@namespace);
292-
ns = new NamespaceTreeNode(escapedNamespace);
293-
}
294-
else
295-
{
296-
var parentNamespaceTreeNode = GetOrCreateNamespaceTreeNode(@namespace.Substring(0, decimalIndex));
297-
var escapedInnerNamespace = Language.EscapeName(@namespace.Substring(decimalIndex + 1));
298-
ns = new NamespaceTreeNode(escapedInnerNamespace);
299-
parentNamespaceTreeNode.Children.Add(ns);
300-
}
301-
}
302-
else
303-
{
304-
var escapedNamespace = Language.EscapeName(@namespace);
305-
ns = new NamespaceTreeNode(escapedNamespace);
306-
}
307-
namespaces.Add(@namespace, ns);
308-
}
309-
return ns;
310-
}
311-
}
312-
313-
void LoadChildrenForWebCilFile(WebCilFile module)
245+
void LoadChildrenForExecutableFile(MetadataFile module)
314246
{
315247
typeSystem = LoadedAssembly.GetTypeSystemOrNull();
316248
var assembly = (MetadataModule)typeSystem.MainModule;

0 commit comments

Comments
 (0)