Browse Source

Show inherited members setting

pull/3082/head
miloush 2 years ago
parent
commit
6e78f0a31b
  1. 15
      ILSpy/FilterSettings.cs
  2. 1
      ILSpy/MainWindow.xaml
  3. 11
      ILSpy/Properties/Resources.Designer.cs
  4. 5
      ILSpy/Properties/Resources.resx
  5. 3
      ILSpy/Properties/Resources.zh-Hans.resx
  6. 25
      ILSpy/TreeNodes/TypeTreeNode.cs

15
ILSpy/FilterSettings.cs

@ -47,6 +47,7 @@ namespace ICSharpCode.ILSpy @@ -47,6 +47,7 @@ namespace ICSharpCode.ILSpy
public FilterSettings(XElement element)
{
this.ShowApiLevel = (ApiVisibility?)(int?)element.Element("ShowAPILevel") ?? ApiVisibility.PublicAndInternal;
this.ShowApiInherited = (bool?)element.Element("ShowAPIInherited") ?? false;
this.Language = Languages.GetLanguage((string)element.Element("Language"));
this.LanguageVersion = Language.LanguageVersions.FirstOrDefault(v => v.Version == (string)element.Element("LanguageVersion"));
if (this.LanguageVersion == default(LanguageVersion))
@ -58,6 +59,7 @@ namespace ICSharpCode.ILSpy @@ -58,6 +59,7 @@ namespace ICSharpCode.ILSpy
return new XElement(
"FilterSettings",
new XElement("ShowAPILevel", (int)this.ShowApiLevel),
new XElement("ShowAPIInherited", this.ShowApiInherited),
new XElement("Language", this.Language.Name),
new XElement("LanguageVersion", this.LanguageVersion?.Version)
);
@ -142,6 +144,19 @@ namespace ICSharpCode.ILSpy @@ -142,6 +144,19 @@ namespace ICSharpCode.ILSpy
}
}
bool showApiInherited;
public bool ShowApiInherited {
get { return showApiInherited; }
set {
if (showApiInherited != value)
{
showApiInherited = value;
OnPropertyChanged(nameof(ShowApiInherited));
}
}
}
Language language;
/// <summary>

1
ILSpy/MainWindow.xaml

@ -138,6 +138,7 @@ @@ -138,6 +138,7 @@
<MenuItem Header="{x:Static properties:Resources.Show_publiconlyTypesMembers}" IsCheckable="True" IsChecked="{Binding Workspace.ActiveTabPage.FilterSettings.ApiVisPublicOnly}" />
<MenuItem Header="{x:Static properties:Resources.Show_internalTypesMembers}" IsCheckable="True" IsChecked="{Binding Workspace.ActiveTabPage.FilterSettings.ApiVisPublicAndInternal}" />
<MenuItem Header="{x:Static properties:Resources.Show_allTypesAndMembers}" IsCheckable="True" IsChecked="{Binding Workspace.ActiveTabPage.FilterSettings.ApiVisAll}" />
<MenuItem Header="{x:Static properties:Resources.Show_inheritedMembers}" IsCheckable="True" IsChecked="{Binding Workspace.ActiveTabPage.FilterSettings.ShowApiInherited}" />
<Separator/>
<MenuItem Header="{x:Static properties:Resources.Theme}" ItemsSource="{x:Static themes:ThemeManager.AllThemes}">
<MenuItem.ItemContainerStyle>

11
ILSpy/Properties/Resources.Designer.cs generated

@ -2503,7 +2503,16 @@ namespace ICSharpCode.ILSpy.Properties { @@ -2503,7 +2503,16 @@ namespace ICSharpCode.ILSpy.Properties {
}
/// <summary>
/// Looks up a localized string similar to Show public, private and internal.
/// Looks up a localized string similar to Show in_herited members.
/// </summary>
public static string Show_inheritedMembers {
get {
return ResourceManager.GetString("Show_inheritedMembers", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Show public, private and _internal.
/// </summary>
public static string Show_internalTypesMembers {
get {

5
ILSpy/Properties/Resources.resx

@ -901,8 +901,11 @@ Do you want to continue?</value> @@ -901,8 +901,11 @@ Do you want to continue?</value>
<data name="Show_allTypesAndMembers" xml:space="preserve">
<value>Show _all types and members</value>
</data>
<data name="Show_inheritedMembers" xml:space="preserve">
<value>Show in_herited members</value>
</data>
<data name="Show_internalTypesMembers" xml:space="preserve">
<value>Show public, private and internal</value>
<value>Show public, private and _internal</value>
</data>
<data name="Show_publiconlyTypesMembers" xml:space="preserve">
<value>Show only _public types and members</value>

3
ILSpy/Properties/Resources.zh-Hans.resx

@ -872,6 +872,9 @@ @@ -872,6 +872,9 @@
<data name="Show_allTypesAndMembers" xml:space="preserve">
<value>显示所有类型和成员(_A)</value>
</data>
<data name="Show_inheritedMembers" xml:space="preserve">
<value>显示继承成员(_H)</value>
</data>
<data name="Show_internalTypesMembers" xml:space="preserve">
<value>显示内部类型和成员(_I)</value>
</data>

25
ILSpy/TreeNodes/TypeTreeNode.cs

@ -31,6 +31,8 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -31,6 +31,8 @@ namespace ICSharpCode.ILSpy.TreeNodes
public sealed class TypeTreeNode : ILSpyTreeNode, IMemberTreeNode
{
private bool? loadedInheritedMembers;
public TypeTreeNode(ITypeDefinition typeDefinition, AssemblyTreeNode parentAssemblyNode)
{
this.ParentAssemblyNode = parentAssemblyNode ?? throw new ArgumentNullException(nameof(parentAssemblyNode));
@ -84,8 +86,23 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -84,8 +86,23 @@ namespace ICSharpCode.ILSpy.TreeNodes
}
}
protected override void OnFilterSettingsChanged()
{
base.OnFilterSettingsChanged();
if (loadedInheritedMembers != null && loadedInheritedMembers != FilterSettings.ShowApiInherited)
{
this.Children.Clear();
if (IsVisible)
LoadChildren();
else
LazyLoading = true;
}
}
protected override void LoadChildren()
{
loadedInheritedMembers = FilterSettings.ShowApiInherited;
GetMemberOptions inheritanceOptions = FilterSettings.ShowApiInherited ? GetMemberOptions.None : GetMemberOptions.IgnoreInheritedMembers;
if (TypeDefinition.DirectBaseTypes.Any())
this.Children.Add(new BaseTypesTreeNode(ParentAssemblyNode.LoadedAssembly.GetPEFileOrNull(), TypeDefinition));
if (!TypeDefinition.IsSealed)
@ -104,20 +121,20 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -104,20 +121,20 @@ namespace ICSharpCode.ILSpy.TreeNodes
}
else
{
foreach (var field in TypeDefinition.Fields.OrderBy(f => f.Name, NaturalStringComparer.Instance))
foreach (var field in TypeDefinition.GetFields(null, inheritanceOptions).OrderBy(f => f.Name, NaturalStringComparer.Instance))
{
this.Children.Add(new FieldTreeNode(field));
}
}
foreach (var property in TypeDefinition.Properties.OrderBy(p => p.Name, NaturalStringComparer.Instance))
foreach (var property in TypeDefinition.GetProperties(null, inheritanceOptions).OrderBy(p => p.Name, NaturalStringComparer.Instance))
{
this.Children.Add(new PropertyTreeNode(property));
}
foreach (var ev in TypeDefinition.Events.OrderBy(e => e.Name, NaturalStringComparer.Instance))
foreach (var ev in TypeDefinition.GetEvents(null, inheritanceOptions).OrderBy(e => e.Name, NaturalStringComparer.Instance))
{
this.Children.Add(new EventTreeNode(ev));
}
foreach (var method in TypeDefinition.Methods.OrderBy(m => m.Name, NaturalStringComparer.Instance))
foreach (var method in TypeDefinition.GetMethods(null, inheritanceOptions).OrderBy(m => m.Name, NaturalStringComparer.Instance))
{
if (method.MetadataToken.IsNil)
continue;

Loading…
Cancel
Save