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
public FilterSettings(XElement element) public FilterSettings(XElement element)
{ {
this.ShowApiLevel = (ApiVisibility?)(int?)element.Element("ShowAPILevel") ?? ApiVisibility.PublicAndInternal; 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.Language = Languages.GetLanguage((string)element.Element("Language"));
this.LanguageVersion = Language.LanguageVersions.FirstOrDefault(v => v.Version == (string)element.Element("LanguageVersion")); this.LanguageVersion = Language.LanguageVersions.FirstOrDefault(v => v.Version == (string)element.Element("LanguageVersion"));
if (this.LanguageVersion == default(LanguageVersion)) if (this.LanguageVersion == default(LanguageVersion))
@ -58,6 +59,7 @@ namespace ICSharpCode.ILSpy
return new XElement( return new XElement(
"FilterSettings", "FilterSettings",
new XElement("ShowAPILevel", (int)this.ShowApiLevel), new XElement("ShowAPILevel", (int)this.ShowApiLevel),
new XElement("ShowAPIInherited", this.ShowApiInherited),
new XElement("Language", this.Language.Name), new XElement("Language", this.Language.Name),
new XElement("LanguageVersion", this.LanguageVersion?.Version) new XElement("LanguageVersion", this.LanguageVersion?.Version)
); );
@ -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; Language language;
/// <summary> /// <summary>

1
ILSpy/MainWindow.xaml

@ -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_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_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_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/> <Separator/>
<MenuItem Header="{x:Static properties:Resources.Theme}" ItemsSource="{x:Static themes:ThemeManager.AllThemes}"> <MenuItem Header="{x:Static properties:Resources.Theme}" ItemsSource="{x:Static themes:ThemeManager.AllThemes}">
<MenuItem.ItemContainerStyle> <MenuItem.ItemContainerStyle>

11
ILSpy/Properties/Resources.Designer.cs generated

@ -2503,7 +2503,16 @@ namespace ICSharpCode.ILSpy.Properties {
} }
/// <summary> /// <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> /// </summary>
public static string Show_internalTypesMembers { public static string Show_internalTypesMembers {
get { get {

5
ILSpy/Properties/Resources.resx

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

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

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

25
ILSpy/TreeNodes/TypeTreeNode.cs

@ -31,6 +31,8 @@ namespace ICSharpCode.ILSpy.TreeNodes
public sealed class TypeTreeNode : ILSpyTreeNode, IMemberTreeNode public sealed class TypeTreeNode : ILSpyTreeNode, IMemberTreeNode
{ {
private bool? loadedInheritedMembers;
public TypeTreeNode(ITypeDefinition typeDefinition, AssemblyTreeNode parentAssemblyNode) public TypeTreeNode(ITypeDefinition typeDefinition, AssemblyTreeNode parentAssemblyNode)
{ {
this.ParentAssemblyNode = parentAssemblyNode ?? throw new ArgumentNullException(nameof(parentAssemblyNode)); this.ParentAssemblyNode = parentAssemblyNode ?? throw new ArgumentNullException(nameof(parentAssemblyNode));
@ -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() protected override void LoadChildren()
{ {
loadedInheritedMembers = FilterSettings.ShowApiInherited;
GetMemberOptions inheritanceOptions = FilterSettings.ShowApiInherited ? GetMemberOptions.None : GetMemberOptions.IgnoreInheritedMembers;
if (TypeDefinition.DirectBaseTypes.Any()) if (TypeDefinition.DirectBaseTypes.Any())
this.Children.Add(new BaseTypesTreeNode(ParentAssemblyNode.LoadedAssembly.GetPEFileOrNull(), TypeDefinition)); this.Children.Add(new BaseTypesTreeNode(ParentAssemblyNode.LoadedAssembly.GetPEFileOrNull(), TypeDefinition));
if (!TypeDefinition.IsSealed) if (!TypeDefinition.IsSealed)
@ -104,20 +121,20 @@ namespace ICSharpCode.ILSpy.TreeNodes
} }
else 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)); 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)); 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)); 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) if (method.MetadataToken.IsNil)
continue; continue;

Loading…
Cancel
Save