Skip to content

Commit ff24716

Browse files
Reduce code duplication in Metadata tables by introducing a LoadTable method.
1 parent 26fdc39 commit ff24716

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+312
-1199
lines changed

ILSpy/Metadata/CorTables/AssemblyRefTableTreeNode.cs

Lines changed: 5 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -26,44 +26,24 @@
2626

2727
namespace ICSharpCode.ILSpy.Metadata
2828
{
29-
internal class AssemblyRefTableTreeNode : MetadataTableTreeNode
29+
internal class AssemblyRefTableTreeNode : MetadataTableTreeNode<AssemblyRefTableTreeNode.AssemblyRefEntry>
3030
{
3131
public AssemblyRefTableTreeNode(MetadataFile metadataFile)
3232
: base(TableIndex.AssemblyRef, metadataFile)
3333
{
3434
}
3535

36-
public override bool View(ViewModels.TabPageModel tabPage)
36+
protected override IReadOnlyList<AssemblyRefEntry> LoadTable()
3737
{
38-
tabPage.Title = Text.ToString();
39-
tabPage.SupportsLanguageSwitching = false;
40-
41-
var view = Helpers.PrepareDataGrid(tabPage, this);
4238
var list = new List<AssemblyRefEntry>();
43-
AssemblyRefEntry scrollTargetEntry = default;
44-
4539
foreach (var row in metadataFile.Metadata.AssemblyReferences)
4640
{
47-
AssemblyRefEntry entry = new AssemblyRefEntry(metadataFile, row);
48-
if (scrollTarget == MetadataTokens.GetRowNumber(row))
49-
{
50-
scrollTargetEntry = entry;
51-
}
52-
list.Add(entry);
53-
}
54-
55-
view.ItemsSource = list;
56-
tabPage.Content = view;
57-
58-
if (scrollTargetEntry.RID > 0)
59-
{
60-
ScrollItemIntoView(view, scrollTargetEntry);
41+
list.Add(new AssemblyRefEntry(metadataFile, row));
6142
}
62-
63-
return true;
43+
return list;
6444
}
6545

66-
struct AssemblyRefEntry
46+
internal struct AssemblyRefEntry
6747
{
6848
readonly MetadataFile metadataFile;
6949
readonly AssemblyReferenceHandle handle;

ILSpy/Metadata/CorTables/AssemblyTableTreeNode.cs

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
// DEALINGS IN THE SOFTWARE.
1818

1919
using System;
20+
using System.Collections.Generic;
2021
using System.Reflection;
2122
using System.Reflection.Metadata;
2223
using System.Reflection.Metadata.Ecma335;
@@ -25,33 +26,26 @@
2526

2627
namespace ICSharpCode.ILSpy.Metadata
2728
{
28-
internal class AssemblyTableTreeNode : MetadataTableTreeNode
29+
internal class AssemblyTableTreeNode : MetadataTableTreeNode<AssemblyTableTreeNode.AssemblyEntry>
2930
{
3031
public AssemblyTableTreeNode(MetadataFile metadataFile)
3132
: base(TableIndex.Assembly, metadataFile)
3233
{
3334
}
3435

35-
public override bool View(ViewModels.TabPageModel tabPage)
36+
protected override IReadOnlyList<AssemblyEntry> LoadTable()
3637
{
37-
tabPage.Title = Text.ToString();
38-
tabPage.SupportsLanguageSwitching = false;
39-
40-
var view = Helpers.PrepareDataGrid(tabPage, this);
4138
if (metadataFile.Metadata.IsAssembly)
4239
{
43-
view.ItemsSource = new[] { new AssemblyEntry(metadataFile.Metadata, metadataFile.MetadataOffset) };
40+
return [new AssemblyEntry(metadataFile.Metadata, metadataFile.MetadataOffset)];
4441
}
4542
else
4643
{
47-
view.ItemsSource = Array.Empty<AssemblyEntry>();
44+
return [];
4845
}
49-
50-
tabPage.Content = view;
51-
return true;
5246
}
5347

54-
readonly struct AssemblyEntry
48+
internal readonly struct AssemblyEntry
5549
{
5650
readonly int metadataOffset;
5751
readonly MetadataReader metadata;

ILSpy/Metadata/CorTables/ClassLayoutTableTreeNode.cs

Lines changed: 5 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -26,45 +26,26 @@
2626

2727
namespace ICSharpCode.ILSpy.Metadata
2828
{
29-
class ClassLayoutTableTreeNode : MetadataTableTreeNode
29+
internal class ClassLayoutTableTreeNode : MetadataTableTreeNode<ClassLayoutTableTreeNode.ClassLayoutEntry>
3030
{
3131
public ClassLayoutTableTreeNode(MetadataFile metadataFile)
3232
: base(TableIndex.ClassLayout, metadataFile)
3333
{
3434
}
3535

36-
public override bool View(ViewModels.TabPageModel tabPage)
36+
protected override IReadOnlyList<ClassLayoutEntry> LoadTable()
3737
{
38-
tabPage.Title = Text.ToString();
39-
tabPage.SupportsLanguageSwitching = false;
40-
41-
var view = Helpers.PrepareDataGrid(tabPage, this);
42-
4338
var list = new List<ClassLayoutEntry>();
4439

4540
var length = metadataFile.Metadata.GetTableRowCount(TableIndex.ClassLayout);
4641
ReadOnlySpan<byte> ptr = metadataFile.Metadata.AsReadOnlySpan();
47-
ClassLayoutEntry scrollTargetEntry = default;
4842

4943
for (int rid = 1; rid <= length; rid++)
5044
{
51-
ClassLayoutEntry entry = new ClassLayoutEntry(metadataFile, ptr, rid);
52-
if (scrollTarget == rid)
53-
{
54-
scrollTargetEntry = entry;
55-
}
56-
list.Add(entry);
57-
}
58-
59-
view.ItemsSource = list;
60-
tabPage.Content = view;
61-
62-
if (scrollTargetEntry.RID > 0)
63-
{
64-
ScrollItemIntoView(view, scrollTargetEntry);
45+
list.Add(new ClassLayoutEntry(metadataFile, ptr, rid));
6546
}
6647

67-
return true;
48+
return list;
6849
}
6950

7051
readonly struct ClassLayout
@@ -81,7 +62,7 @@ public ClassLayout(ReadOnlySpan<byte> ptr, int typeDefSize)
8162
}
8263
}
8364

84-
struct ClassLayoutEntry
65+
internal struct ClassLayoutEntry
8566
{
8667
readonly MetadataFile metadataFile;
8768
readonly ClassLayout classLayout;

ILSpy/Metadata/CorTables/ConstantTableTreeNode.cs

Lines changed: 6 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -21,50 +21,27 @@
2121
using System.Reflection.Metadata.Ecma335;
2222

2323
using ICSharpCode.Decompiler.Metadata;
24-
using ICSharpCode.ILSpy.ViewModels;
2524

2625
namespace ICSharpCode.ILSpy.Metadata
2726
{
28-
internal class ConstantTableTreeNode : MetadataTableTreeNode
27+
internal class ConstantTableTreeNode : MetadataTableTreeNode<ConstantTableTreeNode.ConstantEntry>
2928
{
3029
public ConstantTableTreeNode(MetadataFile metadataFile)
3130
: base(TableIndex.Constant, metadataFile)
3231
{
3332
}
3433

35-
public override bool View(TabPageModel tabPage)
34+
protected override IReadOnlyList<ConstantEntry> LoadTable()
3635
{
37-
tabPage.Title = Text.ToString();
38-
tabPage.SupportsLanguageSwitching = false;
39-
40-
var view = Helpers.PrepareDataGrid(tabPage, this);
41-
var metadata = metadataFile.Metadata;
42-
4336
var list = new List<ConstantEntry>();
44-
ConstantEntry scrollTargetEntry = default;
45-
46-
for (int row = 1; row <= metadata.GetTableRowCount(TableIndex.Constant); row++)
37+
for (int row = 1; row <= metadataFile.Metadata.GetTableRowCount(TableIndex.Constant); row++)
4738
{
48-
ConstantEntry entry = new ConstantEntry(metadataFile, MetadataTokens.ConstantHandle(row));
49-
if (scrollTarget == row)
50-
{
51-
scrollTargetEntry = entry;
52-
}
53-
list.Add(entry);
39+
list.Add(new ConstantEntry(metadataFile, MetadataTokens.ConstantHandle(row)));
5440
}
55-
56-
view.ItemsSource = list;
57-
tabPage.Content = view;
58-
59-
if (scrollTargetEntry.RID > 0)
60-
{
61-
ScrollItemIntoView(view, scrollTargetEntry);
62-
}
63-
64-
return true;
41+
return list;
6542
}
6643

67-
struct ConstantEntry
44+
internal struct ConstantEntry
6845
{
6946
readonly MetadataFile metadataFile;
7047
readonly EntityHandle handle;

ILSpy/Metadata/CorTables/CustomAttributeTableTreeNode.cs

Lines changed: 6 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -24,47 +24,24 @@
2424

2525
namespace ICSharpCode.ILSpy.Metadata
2626
{
27-
class CustomAttributeTableTreeNode : MetadataTableTreeNode
27+
class CustomAttributeTableTreeNode : MetadataTableTreeNode<CustomAttributeTableTreeNode.CustomAttributeEntry>
2828
{
2929
public CustomAttributeTableTreeNode(MetadataFile metadataFile)
3030
: base(TableIndex.CustomAttribute, metadataFile)
3131
{
3232
}
3333

34-
public override bool View(ViewModels.TabPageModel tabPage)
34+
protected override IReadOnlyList<CustomAttributeEntry> LoadTable()
3535
{
36-
tabPage.Title = Text.ToString();
37-
tabPage.SupportsLanguageSwitching = false;
38-
39-
var view = Helpers.PrepareDataGrid(tabPage, this);
40-
var metadata = metadataFile.Metadata;
41-
4236
var list = new List<CustomAttributeEntry>();
43-
CustomAttributeEntry scrollTargetEntry = default;
44-
45-
foreach (var row in metadata.CustomAttributes)
46-
{
47-
CustomAttributeEntry entry = new CustomAttributeEntry(metadataFile, row);
48-
if (scrollTarget == MetadataTokens.GetRowNumber(row))
49-
{
50-
scrollTargetEntry = entry;
51-
}
52-
list.Add(entry);
53-
}
54-
55-
view.ItemsSource = list;
56-
57-
tabPage.Content = view;
58-
59-
if (scrollTargetEntry.RID > 0)
37+
foreach (var row in metadataFile.Metadata.CustomAttributes)
6038
{
61-
ScrollItemIntoView(view, scrollTargetEntry);
39+
list.Add(new CustomAttributeEntry(metadataFile, row));
6240
}
63-
64-
return true;
41+
return list;
6542
}
6643

67-
struct CustomAttributeEntry
44+
internal struct CustomAttributeEntry
6845
{
6946
readonly MetadataFile metadataFile;
7047
readonly CustomAttributeHandle handle;

ILSpy/Metadata/CorTables/DeclSecurityTableTreeNode.cs

Lines changed: 6 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -25,47 +25,24 @@
2525

2626
namespace ICSharpCode.ILSpy.Metadata
2727
{
28-
class DeclSecurityTableTreeNode : MetadataTableTreeNode
28+
class DeclSecurityTableTreeNode : MetadataTableTreeNode<DeclSecurityTableTreeNode.DeclSecurityEntry>
2929
{
3030
public DeclSecurityTableTreeNode(MetadataFile metadataFile)
3131
: base(TableIndex.DeclSecurity, metadataFile)
3232
{
3333
}
3434

35-
public override bool View(ViewModels.TabPageModel tabPage)
35+
protected override IReadOnlyList<DeclSecurityEntry> LoadTable()
3636
{
37-
tabPage.Title = Text.ToString();
38-
tabPage.SupportsLanguageSwitching = false;
39-
40-
var view = Helpers.PrepareDataGrid(tabPage, this);
41-
var metadata = metadataFile.Metadata;
42-
4337
var list = new List<DeclSecurityEntry>();
44-
DeclSecurityEntry scrollTargetEntry = default;
45-
46-
foreach (var row in metadata.DeclarativeSecurityAttributes)
47-
{
48-
var entry = new DeclSecurityEntry(metadataFile, row);
49-
if (scrollTarget == MetadataTokens.GetRowNumber(row))
50-
{
51-
scrollTargetEntry = entry;
52-
}
53-
list.Add(entry);
54-
}
55-
56-
view.ItemsSource = list;
57-
58-
tabPage.Content = view;
59-
60-
if (scrollTargetEntry.RID > 0)
38+
foreach (var row in metadataFile.Metadata.DeclarativeSecurityAttributes)
6139
{
62-
ScrollItemIntoView(view, scrollTargetEntry);
40+
list.Add(new DeclSecurityEntry(metadataFile, row));
6341
}
64-
65-
return true;
42+
return list;
6643
}
6744

68-
struct DeclSecurityEntry
45+
internal struct DeclSecurityEntry
6946
{
7047
readonly MetadataFile metadataFile;
7148
readonly DeclarativeSecurityAttributeHandle handle;

0 commit comments

Comments
 (0)