Browse Source

Fix #747: Add option to display all members, including compiler-generated members and getters/setters in tree view.

pull/1360/head
Siegfried Pammer 7 years ago
parent
commit
40dafd78d4
  1. 55
      ILSpy/FilterSettings.cs
  2. 7
      ILSpy/ILSpy.csproj
  3. BIN
      ILSpy/Images/ShowAll.png
  4. 8
      ILSpy/MainWindow.xaml
  5. 4
      ILSpy/TreeNodes/DerivedTypesEntryNode.cs
  6. 4
      ILSpy/TreeNodes/EventTreeNode.cs
  7. 4
      ILSpy/TreeNodes/FieldTreeNode.cs
  8. 4
      ILSpy/TreeNodes/MethodTreeNode.cs
  9. 4
      ILSpy/TreeNodes/PropertyTreeNode.cs
  10. 2
      ILSpy/TreeNodes/ResourceNodes/ResourceTreeNode.cs
  11. 4
      ILSpy/TreeNodes/TypeTreeNode.cs

55
ILSpy/FilterSettings.cs

@ -36,7 +36,7 @@ namespace ICSharpCode.ILSpy @@ -36,7 +36,7 @@ namespace ICSharpCode.ILSpy
{
public FilterSettings(XElement element)
{
this.ShowInternalApi = (bool?)element.Element("ShowInternalAPI") ?? true;
this.ShowApiLevel = (ApiVisibility?)(int?)element.Element("ShowAPILevel") ?? ApiVisibility.PublicOnly;
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))
@ -47,7 +47,7 @@ namespace ICSharpCode.ILSpy @@ -47,7 +47,7 @@ namespace ICSharpCode.ILSpy
{
return new XElement(
"FilterSettings",
new XElement("ShowInternalAPI", this.ShowInternalApi),
new XElement("ShowAPILevel", (int)this.ShowApiLevel),
new XElement("Language", this.Language.Name),
new XElement("LanguageVersion", this.LanguageVersion.Version)
);
@ -78,22 +78,48 @@ namespace ICSharpCode.ILSpy @@ -78,22 +78,48 @@ namespace ICSharpCode.ILSpy
return true;
return text.IndexOf(searchTerm, StringComparison.OrdinalIgnoreCase) >= 0;
}
bool showInternalApi;
ApiVisibility showApiLevel;
/// <summary>
/// Gets/Sets whether internal API members should be shown.
/// Gets/Sets whether public, internal or all API members should be shown.
/// </summary>
public ApiVisibility ShowApiLevel {
get { return showApiLevel; }
set {
if (showApiLevel != value) {
showApiLevel = value;
OnPropertyChanged("ShowApiLevel");
}
}
}
public bool ShowInternalApi {
get { return showInternalApi; }
get { return ShowApiLevel == ApiVisibility.PublicAndInternal; }
set {
if (showInternalApi != value) {
showInternalApi = value;
OnPropertyChanged("ShowInternalAPI");
if (ShowApiLevel == ApiVisibility.PublicAndInternal) {
ShowApiLevel = ApiVisibility.PublicOnly;
} else {
ShowApiLevel = ApiVisibility.PublicAndInternal;
}
OnPropertyChanged("ShowInternalApi");
OnPropertyChanged("ShowAllApi");
}
}
public bool ShowAllApi {
get { return ShowApiLevel == ApiVisibility.All; }
set {
if (ShowApiLevel == ApiVisibility.All) {
ShowApiLevel = ApiVisibility.PublicOnly;
} else {
ShowApiLevel = ApiVisibility.All;
}
OnPropertyChanged("ShowInternalApi");
OnPropertyChanged("ShowAllApi");
}
}
Language language;
/// <summary>
@ -149,4 +175,11 @@ namespace ICSharpCode.ILSpy @@ -149,4 +175,11 @@ namespace ICSharpCode.ILSpy
return f;
}
}
public enum ApiVisibility
{
PublicOnly,
PublicAndInternal,
All
}
}

7
ILSpy/ILSpy.csproj

@ -299,7 +299,7 @@ @@ -299,7 +299,7 @@
<Compile Include="TreeNodes\ThreadingSupport.cs" />
<Compile Include="TreeNodes\TypeTreeNode.cs" />
<EmbeddedResource Include="README.txt" />
<EmbeddedResource Include="TextView\ILAsm-Mode.xshd" />
<EmbeddedResource Include="TextView\ILAsm-Mode.xshd" />
</ItemGroup>
<ItemGroup>
@ -311,7 +311,7 @@ @@ -311,7 +311,7 @@
<Page Include="MainWindow.xaml" />
<Page Include="OpenFromGacDialog.xaml" />
<Page Include="OpenListDialog.xaml" />
<Page Include="NugetPackageBrowserDialog.xaml" />
<Page Include="NugetPackageBrowserDialog.xaml" />
<Page Include="Options\DecompilerSettingsPanel.xaml" />
<Page Include="Options\DisplaySettingsPanel.xaml" />
<Page Include="Options\MiscSettingsPanel.xaml" />
@ -367,7 +367,8 @@ @@ -367,7 +367,8 @@
<Resource Include="Images\OverlayStatic.png" />
<Resource Include="Images\VirtualMethod.png" />
<Resource Include="Images\PInvokeMethod.png" />
<Resource Include="Images\Warning.png" />
<Resource Include="Images\Warning.png" />
<Resource Include="Images\ShowAll.png" />
</ItemGroup>
<ItemGroup>

BIN
ILSpy/Images/ShowAll.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 852 B

8
ILSpy/MainWindow.xaml

@ -55,6 +55,11 @@ @@ -55,6 +55,11 @@
<Image Width="16" Height="16" Source="Images/PrivateInternal.png" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="Show _all types and members" IsCheckable="True" IsChecked="{Binding FilterSettings.ShowAllApi}">
<MenuItem.Icon>
<Image Width="16" Height="16" Source="Images/ShowAll.png" />
</MenuItem.Icon>
</MenuItem>
</MenuItem>
</Menu>
<!-- ToolBar -->
@ -80,6 +85,9 @@ @@ -80,6 +85,9 @@
<CheckBox IsChecked="{Binding FilterSettings.ShowInternalApi}" ToolTip="Show internal types and members">
<Image Width="16" Height="16" Source="Images/PrivateInternal.png" />
</CheckBox>
<CheckBox IsChecked="{Binding FilterSettings.ShowAllApi}" ToolTip="Show all types and members">
<Image Width="16" Height="16" Source="Images/ShowAll.png" />
</CheckBox>
<Separator />
<ComboBox Name="languageComboBox" DisplayMemberPath="Name" Width="100" MaxDropDownHeight="Auto"
ItemsSource="{x:Static local:Languages.AllLanguages}"

4
ILSpy/TreeNodes/DerivedTypesEntryNode.cs

@ -49,10 +49,10 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -49,10 +49,10 @@ namespace ICSharpCode.ILSpy.TreeNodes
public override FilterResult Filter(FilterSettings settings)
{
if (!settings.ShowInternalApi && !IsPublicAPI)
if (settings.ShowApiLevel == ApiVisibility.PublicOnly && !IsPublicAPI)
return FilterResult.Hidden;
if (settings.SearchTermMatches(type.Name)) {
if (type.DeclaringType != null && !settings.Language.ShowMember(type))
if (type.DeclaringType != null && (settings.ShowApiLevel != ApiVisibility.All || !settings.Language.ShowMember(type)))
return FilterResult.Hidden;
else
return FilterResult.Match;

4
ILSpy/TreeNodes/EventTreeNode.cs

@ -59,9 +59,9 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -59,9 +59,9 @@ namespace ICSharpCode.ILSpy.TreeNodes
public override FilterResult Filter(FilterSettings settings)
{
if (!settings.ShowInternalApi && !IsPublicAPI)
if (settings.ShowApiLevel == ApiVisibility.PublicOnly && !IsPublicAPI)
return FilterResult.Hidden;
if (settings.SearchTermMatches(EventDefinition.Name) && settings.Language.ShowMember(EventDefinition))
if (settings.SearchTermMatches(EventDefinition.Name) && (settings.ShowApiLevel == ApiVisibility.All || settings.Language.ShowMember(EventDefinition)))
return FilterResult.Match;
else
return FilterResult.Hidden;

4
ILSpy/TreeNodes/FieldTreeNode.cs

@ -60,9 +60,9 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -60,9 +60,9 @@ namespace ICSharpCode.ILSpy.TreeNodes
public override FilterResult Filter(FilterSettings settings)
{
if (!settings.ShowInternalApi && !IsPublicAPI)
if (settings.ShowApiLevel == ApiVisibility.PublicOnly && !IsPublicAPI)
return FilterResult.Hidden;
if (settings.SearchTermMatches(FieldDefinition.Name) && settings.Language.ShowMember(FieldDefinition))
if (settings.SearchTermMatches(FieldDefinition.Name) && (settings.ShowApiLevel == ApiVisibility.All || settings.Language.ShowMember(FieldDefinition)))
return FilterResult.Match;
else
return FilterResult.Hidden;

4
ILSpy/TreeNodes/MethodTreeNode.cs

@ -90,9 +90,9 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -90,9 +90,9 @@ namespace ICSharpCode.ILSpy.TreeNodes
public override FilterResult Filter(FilterSettings settings)
{
if (!settings.ShowInternalApi && !IsPublicAPI)
if (settings.ShowApiLevel == ApiVisibility.PublicOnly && !IsPublicAPI)
return FilterResult.Hidden;
if (settings.SearchTermMatches(MethodDefinition.Name) && settings.Language.ShowMember(MethodDefinition))
if (settings.SearchTermMatches(MethodDefinition.Name) && (settings.ShowApiLevel == ApiVisibility.All || settings.Language.ShowMember(MethodDefinition)))
return FilterResult.Match;
else
return FilterResult.Hidden;

4
ILSpy/TreeNodes/PropertyTreeNode.cs

@ -66,9 +66,9 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -66,9 +66,9 @@ namespace ICSharpCode.ILSpy.TreeNodes
public override FilterResult Filter(FilterSettings settings)
{
if (!settings.ShowInternalApi && !IsPublicAPI)
if (settings.ShowApiLevel == ApiVisibility.PublicOnly && !IsPublicAPI)
return FilterResult.Hidden;
if (settings.SearchTermMatches(PropertyDefinition.Name) && settings.Language.ShowMember(PropertyDefinition))
if (settings.SearchTermMatches(PropertyDefinition.Name) && (settings.ShowApiLevel == ApiVisibility.All || settings.Language.ShowMember(PropertyDefinition)))
return FilterResult.Match;
else
return FilterResult.Hidden;

2
ILSpy/TreeNodes/ResourceNodes/ResourceTreeNode.cs

@ -58,7 +58,7 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -58,7 +58,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
public override FilterResult Filter(FilterSettings settings)
{
if (!settings.ShowInternalApi && (r.Attributes & ManifestResourceAttributes.VisibilityMask) == ManifestResourceAttributes.Private)
if (settings.ShowApiLevel == ApiVisibility.PublicOnly && (r.Attributes & ManifestResourceAttributes.VisibilityMask) == ManifestResourceAttributes.Private)
return FilterResult.Hidden;
if (settings.SearchTermMatches(r.Name))
return FilterResult.Match;

4
ILSpy/TreeNodes/TypeTreeNode.cs

@ -58,10 +58,10 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -58,10 +58,10 @@ namespace ICSharpCode.ILSpy.TreeNodes
public override FilterResult Filter(FilterSettings settings)
{
if (!settings.ShowInternalApi && !IsPublicAPI)
if (settings.ShowApiLevel == ApiVisibility.PublicOnly && !IsPublicAPI)
return FilterResult.Hidden;
if (settings.SearchTermMatches(TypeDefinition.Name)) {
if (settings.Language.ShowMember(TypeDefinition))
if (settings.ShowApiLevel == ApiVisibility.All || settings.Language.ShowMember(TypeDefinition))
return FilterResult.Match;
else
return FilterResult.Hidden;

Loading…
Cancel
Save