Browse Source

Merge branch 'master' of https://github.com/icsharpcode/ILSpy into icons-refresh

pull/1704/head
Siegfried Pammer 6 years ago
parent
commit
ccd8311909
  1. 2
      DecompilerNuGetDemos.workbook
  2. 4
      ICSharpCode.Decompiler.Console/ICSharpCode.Decompiler.Console.csproj
  3. 2
      ICSharpCode.Decompiler.PowerShell/ICSharpCode.Decompiler.PowerShell.csproj
  4. 6
      ICSharpCode.Decompiler.Tests/ILPrettyTestRunner.cs
  5. 4
      ICSharpCode.Decompiler.Tests/PrettyTestRunner.cs
  6. 2
      ICSharpCode.Decompiler.Tests/TestCases/ILPretty/Issue1389.cs
  7. 15
      ICSharpCode.Decompiler.Tests/TestCases/ILPretty/Issue1681.cs
  8. 42
      ICSharpCode.Decompiler.Tests/TestCases/ILPretty/Issue1681.il
  9. 8
      ICSharpCode.Decompiler.Tests/TestCases/Pretty/VariableNaming.cs
  10. 8
      ICSharpCode.Decompiler.Tests/TestCases/Pretty/VariableNamingWithoutSymbols.cs
  11. 2
      ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs
  12. 5
      ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs
  13. 27
      ICSharpCode.Decompiler/CSharp/Transforms/DeclareVariables.cs
  14. 20
      ICSharpCode.Decompiler/DecompilerSettings.cs
  15. 2
      ICSharpCode.Decompiler/IL/Transforms/AssignVariableNames.cs
  16. 2
      ILSpy.AddIn/Commands/OpenReferenceCommand.cs
  17. 16
      ILSpy.Package/ILSpy.Package.wapproj
  18. BIN
      ILSpy.Package/Images/StoreLogo.backup.png
  19. 2
      ILSpy.Package/Package-CI.appxmanifest
  20. 2
      ILSpy.Package/Package-Local.appxmanifest
  21. 6
      ILSpy.Package/Package.appxmanifest
  22. 96
      ILSpy.WithPackage.sln
  23. 13
      ILSpy/Analyzers/Builtin/EventImplementsInterfaceAnalyzer.cs
  24. 12
      ILSpy/Analyzers/Builtin/EventOverriddenByAnalyzer.cs
  25. 13
      ILSpy/Analyzers/Builtin/MethodImplementsInterfaceAnalyzer.cs
  26. 13
      ILSpy/Analyzers/Builtin/MethodOverriddenByAnalyzer.cs
  27. 13
      ILSpy/Analyzers/Builtin/PropertyImplementsInterfaceAnalyzer.cs
  28. 12
      ILSpy/Analyzers/Builtin/PropertyOverriddenByAnalyzer.cs
  29. 5
      ILSpy/ILSpy.csproj
  30. 221
      ILSpy/MainWindow.xaml.cs
  31. 2
      ILSpy/Properties/AssemblyInfo.template.cs
  32. 9
      ILSpy/Properties/Resources.Designer.cs
  33. 3
      ILSpy/Properties/Resources.resx
  34. 4
      README.md
  35. 2
      azure-pipelines.yml
  36. 2
      global.json

2
DecompilerNuGetDemos.workbook

@ -6,7 +6,7 @@ platforms: @@ -6,7 +6,7 @@ platforms:
- DotNetCore
packages:
- id: ICSharpCode.Decompiler
version: 5.0.0.5066-preview4
version: 5.0.0.5124
---
Setup: load the references required to work with the decompiler

4
ICSharpCode.Decompiler.Console/ICSharpCode.Decompiler.Console.csproj

@ -7,7 +7,7 @@ @@ -7,7 +7,7 @@
<PackAsTool>true</PackAsTool>
<AssemblyName>ilspycmd</AssemblyName>
<ToolCommandName>ilspycmd</ToolCommandName>
<Version>5.0.0-preview4</Version>
<Version>5.0.0.5124</Version>
<Description>Command-line decompiler using the ILSpy decompilation engine</Description>
<Copyright>Copyright 2011-2019 AlphaSierraPapa</Copyright>
<PackageProjectUrl>https://github.com/icsharpcode/ILSpy/</PackageProjectUrl>
@ -28,7 +28,7 @@ @@ -28,7 +28,7 @@
<ItemGroup>
<PackageReference Include="McMaster.Extensions.CommandLineUtils" Version="2.3.2" />
<PackageReference Include="ICSharpCode.Decompiler" Version="5.0.0.5066-preview4" />
<PackageReference Include="ICSharpCode.Decompiler" Version="5.0.0.5124" />
<PackageReference Include="System.IO.FileSystem.Primitives" Version="4.3.0" />
<PackageReference Include="System.Runtime.Handles" Version="4.3.0" />

2
ICSharpCode.Decompiler.PowerShell/ICSharpCode.Decompiler.PowerShell.csproj

@ -8,7 +8,7 @@ @@ -8,7 +8,7 @@
<ItemGroup>
<PackageReference Include="PowerShellStandard.Library" Version="5.1.0" />
<PackageReference Include="ICSharpCode.Decompiler" Version="5.0.0.5066-preview4" />
<PackageReference Include="ICSharpCode.Decompiler" Version="5.0.0.5124" />
</ItemGroup>
</Project>

6
ICSharpCode.Decompiler.Tests/ILPrettyTestRunner.cs

@ -154,6 +154,12 @@ namespace ICSharpCode.Decompiler.Tests @@ -154,6 +154,12 @@ namespace ICSharpCode.Decompiler.Tests
Run();
}
[Test]
public void Issue1681()
{
Run();
}
[Test]
public void Issue1454()
{

4
ICSharpCode.Decompiler.Tests/PrettyTestRunner.cs

@ -284,7 +284,9 @@ namespace ICSharpCode.Decompiler.Tests @@ -284,7 +284,9 @@ namespace ICSharpCode.Decompiler.Tests
[Test]
public void VariableNamingWithoutSymbols([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions, decompilerSettings: new DecompilerSettings { UseDebugSymbols = false });
var settings = Tester.GetSettings(cscOptions);
settings.UseDebugSymbols = false;
RunForLibrary(cscOptions: cscOptions, decompilerSettings: settings);
}
[Test]

2
ICSharpCode.Decompiler.Tests/TestCases/ILPretty/Issue1389.cs

@ -12,7 +12,7 @@ namespace Issue1389 @@ -12,7 +12,7 @@ namespace Issue1389
private static void UnusedResultOfIsinst()
{
bool flag = GetObject() is TypeCode;
_ = (GetObject() is TypeCode);
}
private static bool BoolResultOfIsinst()

15
ICSharpCode.Decompiler.Tests/TestCases/ILPretty/Issue1681.cs

@ -0,0 +1,15 @@ @@ -0,0 +1,15 @@
namespace ICSharpCode.Decompiler.Tests.TestCases.ILPretty
{
internal class BaseClass
{
public int importsClausePosition;
}
internal class Issue1681 : BaseClass
{
public void Test()
{
_ = importsClausePosition;
}
}
}

42
ICSharpCode.Decompiler.Tests/TestCases/ILPretty/Issue1681.il

@ -0,0 +1,42 @@ @@ -0,0 +1,42 @@
// Metadata version: v4.0.30319
.assembly extern mscorlib
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.ver 4:0:0:0
}
.assembly ConsoleApp11
{
.ver 1:0:0:0
}
.module ConsoleApp11.exe
// MVID: {B973FCD6-A9C4-48A9-8291-26DDC248E208}
.imagebase 0x00400000
.file alignment 0x00000200
.stackreserve 0x00100000
.subsystem 0x0003 // WINDOWS_CUI
.corflags 0x00020003 // ILONLY 32BITPREFERRED
// Image base: 0x000001C4B6C90000
.class private auto ansi beforefieldinit ICSharpCode.Decompiler.Tests.TestCases.ILPretty.BaseClass
extends [mscorlib]System.Object
{
.field public int32 importsClausePosition
}
.class private auto ansi beforefieldinit ICSharpCode.Decompiler.Tests.TestCases.ILPretty.Issue1681
extends ICSharpCode.Decompiler.Tests.TestCases.ILPretty.BaseClass
{
.method public hidebysig instance void Test() cil managed
{
// Code size 18 (0x12)
.maxstack 8
ldarg.0
ldfld int32 class ICSharpCode.Decompiler.Tests.TestCases.ILPretty.BaseClass::importsClausePosition
pop
ret
} // end of method Issue1681::Test
}

8
ICSharpCode.Decompiler.Tests/TestCases/Pretty/VariableNaming.cs

@ -10,12 +10,20 @@ @@ -10,12 +10,20 @@
private void Test(string text, C c)
{
#if ROSLYN
_ = c.Name;
#else
string name = c.Name;
#endif
}
private void Test2(string text, C c)
{
#if ROSLYN
_ = c.Text;
#else
string text2 = c.Text;
#endif
}
}
}

8
ICSharpCode.Decompiler.Tests/TestCases/Pretty/VariableNamingWithoutSymbols.cs

@ -10,12 +10,20 @@ @@ -10,12 +10,20 @@
private void Test(string text, C c)
{
#if ROSLYN
_ = c.Name;
#else
string name = c.Name;
#endif
}
private void Test2(string text, C c)
{
#if ROSLYN
_ = c.Text;
#else
string text2 = c.Text;
#endif
}
}
}

2
ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs

@ -1164,6 +1164,8 @@ namespace ICSharpCode.Decompiler.CSharp @@ -1164,6 +1164,8 @@ namespace ICSharpCode.Decompiler.CSharp
EnumValueDisplayMode DetectBestEnumValueDisplayMode(ITypeDefinition typeDef, PEFile module)
{
if (settings.AlwaysShowEnumMemberValues)
return EnumValueDisplayMode.All;
if (typeDef.HasAttribute(KnownAttribute.Flags, inherit: false))
return EnumValueDisplayMode.All;
bool first = true;

5
ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs

@ -188,6 +188,11 @@ namespace ICSharpCode.Decompiler.CSharp @@ -188,6 +188,11 @@ namespace ICSharpCode.Decompiler.CSharp
}
internal bool HidesVariableWithName(string name)
{
return HidesVariableWithName(currentFunction, name);
}
internal static bool HidesVariableWithName(ILFunction currentFunction, string name)
{
return currentFunction.Ancestors.OfType<ILFunction>().Any(HidesVariableOrNestedFunction);

27
ICSharpCode.Decompiler/CSharp/Transforms/DeclareVariables.cs

@ -180,16 +180,23 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms @@ -180,16 +180,23 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
if (!IsValidInStatementExpression(stmt.Expression)) {
// fetch ILFunction
var function = stmt.Ancestors.SelectMany(a => a.Annotations.OfType<ILFunction>()).First(f => f.Parent == null);
// assign result to dummy variable
var type = stmt.Expression.GetResolveResult().Type;
var v = function.RegisterVariable(
VariableKind.StackSlot,
type,
AssignVariableNames.GenerateVariableName(function, type, stmt.Expression.Annotations.OfType<ILInstruction>().Where(AssignVariableNames.IsSupportedInstruction).FirstOrDefault())
);
stmt.Expression = new AssignmentExpression(
new IdentifierExpression(v.Name).WithRR(new ILVariableResolveResult(v, v.Type)),
stmt.Expression.Detach());
// if possible use C# 7.0 discard-assignment
if (context.Settings.Discards && !ExpressionBuilder.HidesVariableWithName(function, "_")) {
stmt.Expression = new AssignmentExpression(
new IdentifierExpression("_"), // no ResolveResult
stmt.Expression.Detach());
} else {
// assign result to dummy variable
var type = stmt.Expression.GetResolveResult().Type;
var v = function.RegisterVariable(
VariableKind.StackSlot,
type,
AssignVariableNames.GenerateVariableName(function, type, stmt.Expression.Annotations.OfType<ILInstruction>().Where(AssignVariableNames.IsSupportedInstruction).FirstOrDefault())
);
stmt.Expression = new AssignmentExpression(
new IdentifierExpression(v.Name).WithRR(new ILVariableResolveResult(v, v.Type)),
stmt.Expression.Detach());
}
}
}
}

20
ICSharpCode.Decompiler/DecompilerSettings.cs

@ -537,6 +537,26 @@ namespace ICSharpCode.Decompiler @@ -537,6 +537,26 @@ namespace ICSharpCode.Decompiler
}
}
bool alwaysShowEnumMemberValues = false;
/// <summary>
/// Gets/Sets whether to always show enum member values.
/// true: <c>enum Kind { A = 0, B = 1, C = 5 }</c>
/// false: <c>enum Kind { A, B, C = 5 }</c>
/// default: false
/// </summary>
[Category("Other")]
[Description("DecompilerSettings.AlwaysShowEnumMemberValues")]
public bool AlwaysShowEnumMemberValues {
get { return alwaysShowEnumMemberValues; }
set {
if (alwaysShowEnumMemberValues != value) {
alwaysShowEnumMemberValues = value;
OnPropertyChanged();
}
}
}
bool useDebugSymbols = true;
/// <summary>

2
ICSharpCode.Decompiler/IL/Transforms/AssignVariableNames.cs

@ -493,7 +493,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms @@ -493,7 +493,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
AddExistingName(reservedVariableNames, v.Name);
}
}
foreach (var f in rootFunction.Method.DeclaringTypeDefinition.Fields.Select(f => f.Name))
foreach (var f in rootFunction.Method.DeclaringTypeDefinition.GetFields().Select(f => f.Name))
AddExistingName(reservedVariableNames, f);
return reservedVariableNames;
}

2
ILSpy.AddIn/Commands/OpenReferenceCommand.cs

@ -59,12 +59,14 @@ namespace ICSharpCode.ILSpy.AddIn.Commands @@ -59,12 +59,14 @@ namespace ICSharpCode.ILSpy.AddIn.Commands
OpenAssembliesInILSpy(parameters);
else
owner.ShowMessage("Could not find reference '{0}', please ensure the project and all references were built correctly!", reference.Name);
return;
}
// Handle NuGet references
var nugetRefItem = NuGetReferenceForILSpy.Detect(itemObject);
if (nugetRefItem != null) {
OpenAssembliesInILSpy(nugetRefItem.GetILSpyParameters());
return;
}
// Handle project references

16
ILSpy.Package/ILSpy.Package.wapproj

@ -20,22 +20,6 @@ @@ -20,22 +20,6 @@
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|ARM">
<Configuration>Debug</Configuration>
<Platform>ARM</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM">
<Configuration>Release</Configuration>
<Platform>ARM</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|AnyCPU">
<Configuration>Debug</Configuration>
<Platform>AnyCPU</Platform>

BIN
ILSpy.Package/Images/StoreLogo.backup.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

2
ILSpy.Package/Package-CI.appxmanifest

@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
<Properties>
<DisplayName>ILSpy (CI)</DisplayName>
<PublisherDisplayName>ICSharpCode</PublisherDisplayName>
<PublisherDisplayName>CN=ICSharpCode Team</PublisherDisplayName>
<Logo>Images\StoreLogo.png</Logo>
</Properties>

2
ILSpy.Package/Package-Local.appxmanifest

@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
<Properties>
<DisplayName>ILSpy (Local)</DisplayName>
<PublisherDisplayName>ICSharpCode</PublisherDisplayName>
<PublisherDisplayName>CN=ICSharpCode Team</PublisherDisplayName>
<Logo>Images\StoreLogo.png</Logo>
</Properties>

6
ILSpy.Package/Package.appxmanifest

@ -9,13 +9,13 @@ @@ -9,13 +9,13 @@
IgnorableNamespaces="uap rescap">
<Identity
Name="ICSharpCode.ILSpy"
Publisher="CN=ICSharpCode"
Name="17310ICSharpCodeTeam.ILSpy"
Publisher="CN=2A240D0E-77E6-4732-9B57-AD934336A43E"
Version="$INSERTMAJORVERSION$.$INSERTMINORVERSION$.$INSERTREVISION$.0" />
<Properties>
<DisplayName>ILSpy</DisplayName>
<PublisherDisplayName>ICSharpCode</PublisherDisplayName>
<PublisherDisplayName>ICSharpCode Team</PublisherDisplayName>
<Logo>Images\StoreLogo.png</Logo>
</Properties>

96
ILSpy.WithPackage.sln

@ -44,213 +44,129 @@ EndProject @@ -44,213 +44,129 @@ EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|ARM = Debug|ARM
Debug|ARM64 = Debug|ARM64
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|ARM = Release|ARM
Release|ARM64 = Release|ARM64
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{1E85EFF9-E370-4683-83E4-8A3D063FF791}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1E85EFF9-E370-4683-83E4-8A3D063FF791}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1E85EFF9-E370-4683-83E4-8A3D063FF791}.Debug|ARM.ActiveCfg = Debug|Any CPU
{1E85EFF9-E370-4683-83E4-8A3D063FF791}.Debug|ARM.Build.0 = Debug|Any CPU
{1E85EFF9-E370-4683-83E4-8A3D063FF791}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{1E85EFF9-E370-4683-83E4-8A3D063FF791}.Debug|ARM64.Build.0 = Debug|Any CPU
{1E85EFF9-E370-4683-83E4-8A3D063FF791}.Debug|x64.ActiveCfg = Debug|Any CPU
{1E85EFF9-E370-4683-83E4-8A3D063FF791}.Debug|x64.Build.0 = Debug|Any CPU
{1E85EFF9-E370-4683-83E4-8A3D063FF791}.Debug|x86.ActiveCfg = Debug|Any CPU
{1E85EFF9-E370-4683-83E4-8A3D063FF791}.Debug|x86.Build.0 = Debug|Any CPU
{1E85EFF9-E370-4683-83E4-8A3D063FF791}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1E85EFF9-E370-4683-83E4-8A3D063FF791}.Release|Any CPU.Build.0 = Release|Any CPU
{1E85EFF9-E370-4683-83E4-8A3D063FF791}.Release|ARM.ActiveCfg = Release|Any CPU
{1E85EFF9-E370-4683-83E4-8A3D063FF791}.Release|ARM.Build.0 = Release|Any CPU
{1E85EFF9-E370-4683-83E4-8A3D063FF791}.Release|ARM64.ActiveCfg = Release|Any CPU
{1E85EFF9-E370-4683-83E4-8A3D063FF791}.Release|ARM64.Build.0 = Release|Any CPU
{1E85EFF9-E370-4683-83E4-8A3D063FF791}.Release|x64.ActiveCfg = Release|Any CPU
{1E85EFF9-E370-4683-83E4-8A3D063FF791}.Release|x64.Build.0 = Release|Any CPU
{1E85EFF9-E370-4683-83E4-8A3D063FF791}.Release|x86.ActiveCfg = Release|Any CPU
{1E85EFF9-E370-4683-83E4-8A3D063FF791}.Release|x86.Build.0 = Release|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Debug|ARM.ActiveCfg = Debug|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Debug|ARM.Build.0 = Debug|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Debug|ARM64.Build.0 = Debug|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Debug|x64.ActiveCfg = Debug|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Debug|x64.Build.0 = Debug|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Debug|x86.ActiveCfg = Debug|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Debug|x86.Build.0 = Debug|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|Any CPU.Build.0 = Release|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|ARM.ActiveCfg = Release|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|ARM.Build.0 = Release|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|ARM64.ActiveCfg = Release|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|ARM64.Build.0 = Release|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|x64.ActiveCfg = Release|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|x64.Build.0 = Release|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|x86.ActiveCfg = Release|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|x86.Build.0 = Release|Any CPU
{984CC812-9470-4A13-AFF9-CC44068D666C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{984CC812-9470-4A13-AFF9-CC44068D666C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{984CC812-9470-4A13-AFF9-CC44068D666C}.Debug|ARM.ActiveCfg = Debug|Any CPU
{984CC812-9470-4A13-AFF9-CC44068D666C}.Debug|ARM.Build.0 = Debug|Any CPU
{984CC812-9470-4A13-AFF9-CC44068D666C}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{984CC812-9470-4A13-AFF9-CC44068D666C}.Debug|ARM64.Build.0 = Debug|Any CPU
{984CC812-9470-4A13-AFF9-CC44068D666C}.Debug|x64.ActiveCfg = Debug|Any CPU
{984CC812-9470-4A13-AFF9-CC44068D666C}.Debug|x64.Build.0 = Debug|Any CPU
{984CC812-9470-4A13-AFF9-CC44068D666C}.Debug|x86.ActiveCfg = Debug|Any CPU
{984CC812-9470-4A13-AFF9-CC44068D666C}.Debug|x86.Build.0 = Debug|Any CPU
{984CC812-9470-4A13-AFF9-CC44068D666C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{984CC812-9470-4A13-AFF9-CC44068D666C}.Release|Any CPU.Build.0 = Release|Any CPU
{984CC812-9470-4A13-AFF9-CC44068D666C}.Release|ARM.ActiveCfg = Release|Any CPU
{984CC812-9470-4A13-AFF9-CC44068D666C}.Release|ARM.Build.0 = Release|Any CPU
{984CC812-9470-4A13-AFF9-CC44068D666C}.Release|ARM64.ActiveCfg = Release|Any CPU
{984CC812-9470-4A13-AFF9-CC44068D666C}.Release|ARM64.Build.0 = Release|Any CPU
{984CC812-9470-4A13-AFF9-CC44068D666C}.Release|x64.ActiveCfg = Release|Any CPU
{984CC812-9470-4A13-AFF9-CC44068D666C}.Release|x64.Build.0 = Release|Any CPU
{984CC812-9470-4A13-AFF9-CC44068D666C}.Release|x86.ActiveCfg = Release|Any CPU
{984CC812-9470-4A13-AFF9-CC44068D666C}.Release|x86.Build.0 = Release|Any CPU
{FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Debug|ARM.ActiveCfg = Debug|Any CPU
{FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Debug|ARM.Build.0 = Debug|Any CPU
{FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Debug|ARM64.Build.0 = Debug|Any CPU
{FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Debug|x64.ActiveCfg = Debug|Any CPU
{FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Debug|x64.Build.0 = Debug|Any CPU
{FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Debug|x86.ActiveCfg = Debug|Any CPU
{FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Debug|x86.Build.0 = Debug|Any CPU
{FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Release|Any CPU.Build.0 = Release|Any CPU
{FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Release|ARM.ActiveCfg = Release|Any CPU
{FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Release|ARM.Build.0 = Release|Any CPU
{FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Release|ARM64.ActiveCfg = Release|Any CPU
{FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Release|ARM64.Build.0 = Release|Any CPU
{FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Release|x64.ActiveCfg = Release|Any CPU
{FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Release|x64.Build.0 = Release|Any CPU
{FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Release|x86.ActiveCfg = Release|Any CPU
{FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Release|x86.Build.0 = Release|Any CPU
{F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Debug|ARM.ActiveCfg = Debug|Any CPU
{F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Debug|ARM.Build.0 = Debug|Any CPU
{F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Debug|ARM64.Build.0 = Debug|Any CPU
{F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Debug|x64.ActiveCfg = Debug|Any CPU
{F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Debug|x64.Build.0 = Debug|Any CPU
{F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Debug|x86.ActiveCfg = Debug|Any CPU
{F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Debug|x86.Build.0 = Debug|Any CPU
{F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Release|Any CPU.Build.0 = Release|Any CPU
{F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Release|ARM.ActiveCfg = Release|Any CPU
{F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Release|ARM.Build.0 = Release|Any CPU
{F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Release|ARM64.ActiveCfg = Release|Any CPU
{F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Release|ARM64.Build.0 = Release|Any CPU
{F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Release|x64.ActiveCfg = Release|Any CPU
{F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Release|x64.Build.0 = Release|Any CPU
{F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Release|x86.ActiveCfg = Release|Any CPU
{F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Release|x86.Build.0 = Release|Any CPU
{A6BAD2BA-76BA-461C-8B6D-418607591247}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A6BAD2BA-76BA-461C-8B6D-418607591247}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A6BAD2BA-76BA-461C-8B6D-418607591247}.Debug|ARM.ActiveCfg = Debug|Any CPU
{A6BAD2BA-76BA-461C-8B6D-418607591247}.Debug|ARM.Build.0 = Debug|Any CPU
{A6BAD2BA-76BA-461C-8B6D-418607591247}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{A6BAD2BA-76BA-461C-8B6D-418607591247}.Debug|ARM64.Build.0 = Debug|Any CPU
{A6BAD2BA-76BA-461C-8B6D-418607591247}.Debug|x64.ActiveCfg = Debug|Any CPU
{A6BAD2BA-76BA-461C-8B6D-418607591247}.Debug|x64.Build.0 = Debug|Any CPU
{A6BAD2BA-76BA-461C-8B6D-418607591247}.Debug|x86.ActiveCfg = Debug|Any CPU
{A6BAD2BA-76BA-461C-8B6D-418607591247}.Debug|x86.Build.0 = Debug|Any CPU
{A6BAD2BA-76BA-461C-8B6D-418607591247}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A6BAD2BA-76BA-461C-8B6D-418607591247}.Release|Any CPU.Build.0 = Release|Any CPU
{A6BAD2BA-76BA-461C-8B6D-418607591247}.Release|ARM.ActiveCfg = Release|Any CPU
{A6BAD2BA-76BA-461C-8B6D-418607591247}.Release|ARM.Build.0 = Release|Any CPU
{A6BAD2BA-76BA-461C-8B6D-418607591247}.Release|ARM64.ActiveCfg = Release|Any CPU
{A6BAD2BA-76BA-461C-8B6D-418607591247}.Release|ARM64.Build.0 = Release|Any CPU
{A6BAD2BA-76BA-461C-8B6D-418607591247}.Release|x64.ActiveCfg = Release|Any CPU
{A6BAD2BA-76BA-461C-8B6D-418607591247}.Release|x64.Build.0 = Release|Any CPU
{A6BAD2BA-76BA-461C-8B6D-418607591247}.Release|x86.ActiveCfg = Release|Any CPU
{A6BAD2BA-76BA-461C-8B6D-418607591247}.Release|x86.Build.0 = Release|Any CPU
{1169E6D1-1899-43D4-A500-07CE4235B388}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1169E6D1-1899-43D4-A500-07CE4235B388}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1169E6D1-1899-43D4-A500-07CE4235B388}.Debug|ARM.ActiveCfg = Debug|Any CPU
{1169E6D1-1899-43D4-A500-07CE4235B388}.Debug|ARM.Build.0 = Debug|Any CPU
{1169E6D1-1899-43D4-A500-07CE4235B388}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{1169E6D1-1899-43D4-A500-07CE4235B388}.Debug|ARM64.Build.0 = Debug|Any CPU
{1169E6D1-1899-43D4-A500-07CE4235B388}.Debug|x64.ActiveCfg = Debug|Any CPU
{1169E6D1-1899-43D4-A500-07CE4235B388}.Debug|x64.Build.0 = Debug|Any CPU
{1169E6D1-1899-43D4-A500-07CE4235B388}.Debug|x86.ActiveCfg = Debug|Any CPU
{1169E6D1-1899-43D4-A500-07CE4235B388}.Debug|x86.Build.0 = Debug|Any CPU
{1169E6D1-1899-43D4-A500-07CE4235B388}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1169E6D1-1899-43D4-A500-07CE4235B388}.Release|Any CPU.Build.0 = Release|Any CPU
{1169E6D1-1899-43D4-A500-07CE4235B388}.Release|ARM.ActiveCfg = Release|Any CPU
{1169E6D1-1899-43D4-A500-07CE4235B388}.Release|ARM.Build.0 = Release|Any CPU
{1169E6D1-1899-43D4-A500-07CE4235B388}.Release|ARM64.ActiveCfg = Release|Any CPU
{1169E6D1-1899-43D4-A500-07CE4235B388}.Release|ARM64.Build.0 = Release|Any CPU
{1169E6D1-1899-43D4-A500-07CE4235B388}.Release|x64.ActiveCfg = Release|Any CPU
{1169E6D1-1899-43D4-A500-07CE4235B388}.Release|x64.Build.0 = Release|Any CPU
{1169E6D1-1899-43D4-A500-07CE4235B388}.Release|x86.ActiveCfg = Release|Any CPU
{1169E6D1-1899-43D4-A500-07CE4235B388}.Release|x86.Build.0 = Release|Any CPU
{9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Debug|ARM.ActiveCfg = Debug|Any CPU
{9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Debug|ARM.Build.0 = Debug|Any CPU
{9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Debug|ARM64.Build.0 = Debug|Any CPU
{9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Debug|x64.ActiveCfg = Debug|Any CPU
{9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Debug|x64.Build.0 = Debug|Any CPU
{9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Debug|x86.ActiveCfg = Debug|Any CPU
{9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Debug|x86.Build.0 = Debug|Any CPU
{9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Release|Any CPU.Build.0 = Release|Any CPU
{9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Release|ARM.ActiveCfg = Release|Any CPU
{9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Release|ARM.Build.0 = Release|Any CPU
{9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Release|ARM64.ActiveCfg = Release|Any CPU
{9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Release|ARM64.Build.0 = Release|Any CPU
{9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Release|x64.ActiveCfg = Release|Any CPU
{9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Release|x64.Build.0 = Release|Any CPU
{9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Release|x86.ActiveCfg = Release|Any CPU
{9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Release|x86.Build.0 = Release|Any CPU
{B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Debug|ARM.ActiveCfg = Debug|Any CPU
{B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Debug|ARM.Build.0 = Debug|Any CPU
{B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Debug|ARM64.Build.0 = Debug|Any CPU
{B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Debug|x64.ActiveCfg = Debug|Any CPU
{B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Debug|x64.Build.0 = Debug|Any CPU
{B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Debug|x86.ActiveCfg = Debug|Any CPU
{B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Debug|x86.Build.0 = Debug|Any CPU
{B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Release|Any CPU.Build.0 = Release|Any CPU
{B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Release|ARM.ActiveCfg = Release|Any CPU
{B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Release|ARM.Build.0 = Release|Any CPU
{B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Release|ARM64.ActiveCfg = Release|Any CPU
{B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Release|ARM64.Build.0 = Release|Any CPU
{B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Release|x64.ActiveCfg = Release|Any CPU
{B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Release|x64.Build.0 = Release|Any CPU
{B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Release|x86.ActiveCfg = Release|Any CPU
{B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Release|x86.Build.0 = Release|Any CPU
{B51C6636-B8D1-4200-9869-08F2689DE6C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B51C6636-B8D1-4200-9869-08F2689DE6C2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B51C6636-B8D1-4200-9869-08F2689DE6C2}.Debug|ARM.ActiveCfg = Debug|Any CPU
{B51C6636-B8D1-4200-9869-08F2689DE6C2}.Debug|ARM.Build.0 = Debug|Any CPU
{B51C6636-B8D1-4200-9869-08F2689DE6C2}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{B51C6636-B8D1-4200-9869-08F2689DE6C2}.Debug|ARM64.Build.0 = Debug|Any CPU
{B51C6636-B8D1-4200-9869-08F2689DE6C2}.Debug|x64.ActiveCfg = Debug|Any CPU
{B51C6636-B8D1-4200-9869-08F2689DE6C2}.Debug|x64.Build.0 = Debug|Any CPU
{B51C6636-B8D1-4200-9869-08F2689DE6C2}.Debug|x86.ActiveCfg = Debug|Any CPU
{B51C6636-B8D1-4200-9869-08F2689DE6C2}.Debug|x86.Build.0 = Debug|Any CPU
{B51C6636-B8D1-4200-9869-08F2689DE6C2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B51C6636-B8D1-4200-9869-08F2689DE6C2}.Release|Any CPU.Build.0 = Release|Any CPU
{B51C6636-B8D1-4200-9869-08F2689DE6C2}.Release|ARM.ActiveCfg = Release|Any CPU
{B51C6636-B8D1-4200-9869-08F2689DE6C2}.Release|ARM.Build.0 = Release|Any CPU
{B51C6636-B8D1-4200-9869-08F2689DE6C2}.Release|ARM64.ActiveCfg = Release|Any CPU
{B51C6636-B8D1-4200-9869-08F2689DE6C2}.Release|ARM64.Build.0 = Release|Any CPU
{B51C6636-B8D1-4200-9869-08F2689DE6C2}.Release|x64.ActiveCfg = Release|Any CPU
{B51C6636-B8D1-4200-9869-08F2689DE6C2}.Release|x64.Build.0 = Release|Any CPU
{B51C6636-B8D1-4200-9869-08F2689DE6C2}.Release|x86.ActiveCfg = Release|Any CPU
@ -258,12 +174,6 @@ Global @@ -258,12 +174,6 @@ Global
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Debug|ARM.ActiveCfg = Debug|ARM
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Debug|ARM.Build.0 = Debug|ARM
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Debug|ARM.Deploy.0 = Debug|ARM
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Debug|ARM64.ActiveCfg = Debug|ARM64
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Debug|ARM64.Build.0 = Debug|ARM64
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Debug|ARM64.Deploy.0 = Debug|ARM64
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Debug|x64.ActiveCfg = Debug|x64
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Debug|x64.Build.0 = Debug|x64
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Debug|x64.Deploy.0 = Debug|x64
@ -273,12 +183,6 @@ Global @@ -273,12 +183,6 @@ Global
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Release|Any CPU.Build.0 = Release|Any CPU
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Release|Any CPU.Deploy.0 = Release|Any CPU
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Release|ARM.ActiveCfg = Release|ARM
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Release|ARM.Build.0 = Release|ARM
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Release|ARM.Deploy.0 = Release|ARM
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Release|ARM64.ActiveCfg = Release|ARM64
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Release|ARM64.Build.0 = Release|ARM64
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Release|ARM64.Deploy.0 = Release|ARM64
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Release|x64.ActiveCfg = Release|x64
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Release|x64.Build.0 = Release|x64
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Release|x64.Deploy.0 = Release|x64

13
ILSpy/Analyzers/Builtin/EventImplementsInterfaceAnalyzer.cs

@ -42,15 +42,16 @@ namespace ICSharpCode.ILSpy.Analyzers.Builtin @@ -42,15 +42,16 @@ namespace ICSharpCode.ILSpy.Analyzers.Builtin
IEnumerable<IEntity> AnalyzeType(IEvent analyzedEntity, ITypeDefinition type)
{
var token = analyzedEntity.DeclaringTypeDefinition.MetadataToken;
var token = analyzedEntity.MetadataToken;
var declaringTypeToken = analyzedEntity.DeclaringTypeDefinition.MetadataToken;
var module = analyzedEntity.DeclaringTypeDefinition.ParentModule.PEFile;
if (!type.GetAllBaseTypeDefinitions()
.Any(t => t.MetadataToken == token && t.ParentModule.PEFile == module))
var allTypes = type.GetAllBaseTypeDefinitions();
if (!allTypes.Any(t => t.MetadataToken == declaringTypeToken && t.ParentModule.PEFile == module))
yield break;
foreach (var @event in type.GetEvents(options: GetMemberOptions.ReturnMemberDefinitions)) {
if (InheritanceHelper.GetBaseMembers(@event, true)
.Any(m => m.DeclaringTypeDefinition.MetadataToken == token && m.ParentModule.PEFile == module))
foreach (var @event in type.Events) {
var baseMembers = InheritanceHelper.GetBaseMembers(@event, true);
if (baseMembers.Any(m => m.MetadataToken == token && m.ParentModule.PEFile == module))
yield return @event;
}
}

12
ILSpy/Analyzers/Builtin/EventOverriddenByAnalyzer.cs

@ -42,15 +42,17 @@ namespace ICSharpCode.ILSpy.Analyzers.Builtin @@ -42,15 +42,17 @@ namespace ICSharpCode.ILSpy.Analyzers.Builtin
IEnumerable<IEntity> AnalyzeType(IEvent analyzedEntity, ITypeDefinition type)
{
if (!analyzedEntity.DeclaringType.GetAllBaseTypeDefinitions()
.Any(t => t.MetadataToken == analyzedEntity.DeclaringTypeDefinition.MetadataToken && t.ParentModule.PEFile == type.ParentModule.PEFile))
var token = analyzedEntity.MetadataToken;
var declaringTypeToken = analyzedEntity.DeclaringTypeDefinition.MetadataToken;
var module = analyzedEntity.DeclaringTypeDefinition.ParentModule.PEFile;
var allTypes = type.GetAllBaseTypeDefinitions();
if (!allTypes.Any(t => t.MetadataToken == declaringTypeToken && t.ParentModule.PEFile == module))
yield break;
foreach (var @event in type.Events) {
if (!@event.IsOverride) continue;
if (InheritanceHelper.GetBaseMembers(@event, false)
.Any(p => p.MetadataToken == analyzedEntity.MetadataToken &&
p.ParentModule.PEFile == analyzedEntity.ParentModule.PEFile)) {
var baseMembers = InheritanceHelper.GetBaseMembers(@event, false);
if (baseMembers.Any(p => p.MetadataToken == token && p.ParentModule.PEFile == module)) {
yield return @event;
}
}

13
ILSpy/Analyzers/Builtin/MethodImplementsInterfaceAnalyzer.cs

@ -45,15 +45,16 @@ namespace ICSharpCode.ILSpy.Analyzers.Builtin @@ -45,15 +45,16 @@ namespace ICSharpCode.ILSpy.Analyzers.Builtin
IEnumerable<IEntity> AnalyzeType(IMethod analyzedEntity, ITypeDefinition type)
{
var token = analyzedEntity.DeclaringTypeDefinition.MetadataToken;
var token = analyzedEntity.MetadataToken;
var declaringTypeToken = analyzedEntity.DeclaringTypeDefinition.MetadataToken;
var module = analyzedEntity.DeclaringTypeDefinition.ParentModule.PEFile;
if (!type.GetAllBaseTypeDefinitions()
.Any(t => t.MetadataToken == token && t.ParentModule.PEFile == module))
var allTypes = type.GetAllBaseTypeDefinitions();
if (!allTypes.Any(t => t.MetadataToken == declaringTypeToken && t.ParentModule.PEFile == module))
yield break;
foreach (var method in type.GetMethods(options: GetMemberOptions.ReturnMemberDefinitions)) {
if (InheritanceHelper.GetBaseMembers(method, true)
.Any(m => m.DeclaringTypeDefinition.MetadataToken == token && m.ParentModule.PEFile == module))
foreach (var method in type.Methods) {
var baseMembers = InheritanceHelper.GetBaseMembers(method, true);
if (baseMembers.Any(m => m.MetadataToken == token && m.ParentModule.PEFile == module))
yield return method;
}
}

13
ILSpy/Analyzers/Builtin/MethodOverriddenByAnalyzer.cs

@ -44,16 +44,17 @@ namespace ICSharpCode.ILSpy.Analyzers.Builtin @@ -44,16 +44,17 @@ namespace ICSharpCode.ILSpy.Analyzers.Builtin
IEnumerable<IEntity> AnalyzeType(IMethod analyzedEntity, ITypeDefinition type)
{
if (!type.GetAllBaseTypeDefinitions()
.Any(t => t.MetadataToken == analyzedEntity.DeclaringTypeDefinition.MetadataToken
&& t.ParentModule.PEFile == analyzedEntity.ParentModule.PEFile))
var token = analyzedEntity.MetadataToken;
var declaringTypeToken = analyzedEntity.DeclaringTypeDefinition.MetadataToken;
var module = analyzedEntity.DeclaringTypeDefinition.ParentModule.PEFile;
var allTypes = type.GetAllBaseTypeDefinitions();
if (!allTypes.Any(t => t.MetadataToken == declaringTypeToken && t.ParentModule.PEFile == module))
yield break;
foreach (var method in type.Methods) {
if (!method.IsOverride) continue;
if (InheritanceHelper.GetBaseMembers(method, false)
.Any(p => p.MetadataToken == analyzedEntity.MetadataToken &&
p.ParentModule.PEFile == analyzedEntity.ParentModule.PEFile)) {
var baseMembers = InheritanceHelper.GetBaseMembers(method, false);
if (baseMembers.Any(p => p.MetadataToken == token && p.ParentModule.PEFile == module)) {
yield return method;
}
}

13
ILSpy/Analyzers/Builtin/PropertyImplementsInterfaceAnalyzer.cs

@ -42,15 +42,16 @@ namespace ICSharpCode.ILSpy.Analyzers.Builtin @@ -42,15 +42,16 @@ namespace ICSharpCode.ILSpy.Analyzers.Builtin
IEnumerable<IEntity> AnalyzeType(IProperty analyzedEntity, ITypeDefinition type)
{
var token = analyzedEntity.DeclaringTypeDefinition.MetadataToken;
var token = analyzedEntity.MetadataToken;
var declaringTypeToken = analyzedEntity.DeclaringTypeDefinition.MetadataToken;
var module = analyzedEntity.DeclaringTypeDefinition.ParentModule.PEFile;
if (!type.GetAllBaseTypeDefinitions()
.Any(t => t.MetadataToken == token && t.ParentModule.PEFile == module))
var allTypes = type.GetAllBaseTypeDefinitions();
if (!allTypes.Any(t => t.MetadataToken == declaringTypeToken && t.ParentModule.PEFile == module))
yield break;
foreach (var property in type.GetProperties(options: GetMemberOptions.ReturnMemberDefinitions)) {
if (InheritanceHelper.GetBaseMembers(property, true)
.Any(m => m.DeclaringTypeDefinition.MetadataToken == token && m.ParentModule.PEFile == module))
foreach (var property in type.Properties) {
var baseMembers = InheritanceHelper.GetBaseMembers(property, true);
if (baseMembers.Any(m => m.MetadataToken == token && m.ParentModule.PEFile == module))
yield return property;
}
}

12
ILSpy/Analyzers/Builtin/PropertyOverriddenByAnalyzer.cs

@ -45,15 +45,17 @@ namespace ICSharpCode.ILSpy.Analyzers.Builtin @@ -45,15 +45,17 @@ namespace ICSharpCode.ILSpy.Analyzers.Builtin
IEnumerable<IEntity> AnalyzeType(IProperty analyzedEntity, ITypeDefinition type)
{
if (!analyzedEntity.DeclaringType.GetAllBaseTypeDefinitions()
.Any(t => t.MetadataToken == analyzedEntity.DeclaringTypeDefinition.MetadataToken && t.ParentModule.PEFile == type.ParentModule.PEFile))
var token = analyzedEntity.MetadataToken;
var declaringTypeToken = analyzedEntity.DeclaringTypeDefinition.MetadataToken;
var module = analyzedEntity.DeclaringTypeDefinition.ParentModule.PEFile;
var allTypes = type.GetAllBaseTypeDefinitions();
if (!allTypes.Any(t => t.MetadataToken == declaringTypeToken && t.ParentModule.PEFile == module))
yield break;
foreach (var property in type.Properties) {
if (!property.IsOverride) continue;
if (InheritanceHelper.GetBaseMembers(property, false)
.Any(p => p.MetadataToken == analyzedEntity.MetadataToken &&
p.ParentModule.PEFile == analyzedEntity.ParentModule.PEFile)) {
var baseMembers = InheritanceHelper.GetBaseMembers(property, false);
if (baseMembers.Any(p => p.MetadataToken == token && p.ParentModule.PEFile == module)) {
yield return property;
}
}

5
ILSpy/ILSpy.csproj

@ -49,7 +49,6 @@ @@ -49,7 +49,6 @@
<ItemGroup>
<PackageReference Include="AvalonEdit" Version="6.0.0-rc1" />
<PackageReference Include="Microsoft.DiaSymReader.Converter.Xml" Version="1.1.0-beta1-63314-01" />
<PackageReference Include="Microsoft.VisualStudio.Composition" Version="15.5.23" />
<PackageReference Include="Mono.Cecil" Version="0.10.3" />
<PackageReference Include="OSVersionHelper" Version="1.0.11" />
@ -60,6 +59,10 @@ @@ -60,6 +59,10 @@
<ProjectReference Include="..\SharpTreeView\ICSharpCode.TreeView.csproj" />
</ItemGroup>
<ItemGroup Condition="'$(Configuration)' == 'Debug'">
<PackageReference Include="Microsoft.DiaSymReader.Converter.Xml" Version="1.1.0-beta1-63314-01" />
</ItemGroup>
<ItemGroup>
<ApplicationDefinition Include="App.xaml" />
</ItemGroup>

221
ILSpy/MainWindow.xaml.cs

@ -53,26 +53,27 @@ namespace ICSharpCode.ILSpy @@ -53,26 +53,27 @@ namespace ICSharpCode.ILSpy
partial class MainWindow : Window
{
bool refreshInProgress;
bool handlingNugetPackageSelection;
readonly NavigationHistory<NavigationState> history = new NavigationHistory<NavigationState>();
ILSpySettings spySettingsForMainWindow_Loaded;
internal SessionSettings sessionSettings;
internal AssemblyListManager assemblyListManager;
AssemblyList assemblyList;
AssemblyListTreeNode assemblyListTreeNode;
readonly DecompilerTextView decompilerTextView;
static MainWindow instance;
public static MainWindow Instance {
get { return instance; }
}
public SessionSettings SessionSettings {
get { return sessionSettings; }
}
public MainWindow()
{
instance = this;
@ -80,28 +81,28 @@ namespace ICSharpCode.ILSpy @@ -80,28 +81,28 @@ namespace ICSharpCode.ILSpy
this.spySettingsForMainWindow_Loaded = spySettings;
this.sessionSettings = new SessionSettings(spySettings);
this.assemblyListManager = new AssemblyListManager(spySettings);
this.Icon = new BitmapImage(new Uri("pack://application:,,,/ILSpy;component/images/ILSpy.ico"));
this.DataContext = sessionSettings;
InitializeComponent();
decompilerTextView = App.ExportProvider.GetExportedValue<DecompilerTextView>();
mainPane.Content = decompilerTextView;
if (sessionSettings.SplitterPosition > 0 && sessionSettings.SplitterPosition < 1) {
leftColumn.Width = new GridLength(sessionSettings.SplitterPosition, GridUnitType.Star);
rightColumn.Width = new GridLength(1 - sessionSettings.SplitterPosition, GridUnitType.Star);
}
sessionSettings.FilterSettings.PropertyChanged += filterSettings_PropertyChanged;
InitMainMenu();
InitToolbar();
ContextMenuProvider.Add(treeView, decompilerTextView);
this.Loaded += MainWindow_Loaded;
}
void SetWindowBounds(Rect bounds)
{
this.Left = bounds.Left;
@ -109,9 +110,9 @@ namespace ICSharpCode.ILSpy @@ -109,9 +110,9 @@ namespace ICSharpCode.ILSpy
this.Width = bounds.Width;
this.Height = bounds.Height;
}
#region Toolbar extensibility
void InitToolbar()
{
int navigationPos = 0;
@ -134,9 +135,9 @@ namespace ICSharpCode.ILSpy @@ -134,9 +135,9 @@ namespace ICSharpCode.ILSpy
}
}
}
}
Button MakeToolbarItem(Lazy<ICommand, IToolbarCommandMetadata> command)
{
object image = Images.Load(command.Value, command.Metadata.ToolbarIcon);
@ -155,9 +156,9 @@ namespace ICSharpCode.ILSpy @@ -155,9 +156,9 @@ namespace ICSharpCode.ILSpy
};
}
#endregion
#region Main Menu extensibility
void InitMainMenu()
{
var mainMenuCommands = App.ExportProvider.GetExports<ICommand, IMainMenuCommandMetadata>("MainMenuCommand");
@ -198,8 +199,8 @@ namespace ICSharpCode.ILSpy @@ -198,8 +199,8 @@ namespace ICSharpCode.ILSpy
internal static string GetResourceString(string key)
{
var str = !string.IsNullOrEmpty(key)? Properties.Resources.ResourceManager.GetString(key):null;
return string.IsNullOrEmpty(key)|| string.IsNullOrEmpty(str) ? key : str;
var str = !string.IsNullOrEmpty(key) ? Properties.Resources.ResourceManager.GetString(key) : null;
return string.IsNullOrEmpty(key) || string.IsNullOrEmpty(str) ? key : str;
}
#endregion
@ -225,16 +226,18 @@ namespace ICSharpCode.ILSpy @@ -225,16 +226,18 @@ namespace ICSharpCode.ILSpy
SetWindowBounds(sessionSettings.WindowBounds);
else
SetWindowBounds(SessionSettings.DefaultWindowBounds);
this.WindowState = sessionSettings.WindowState;
}
unsafe IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
if (msg == NativeMethods.WM_COPYDATA) {
CopyDataStruct* copyData = (CopyDataStruct*)lParam;
string data = new string((char*)copyData->Buffer, 0, copyData->Size / sizeof(char));
if (data.StartsWith("ILSpy:\r\n", StringComparison.Ordinal)) {
if (handlingNugetPackageSelection)
return (IntPtr)1;
data = data.Substring(8);
List<string> lines = new List<string>();
using (StringReader r = new StringReader(data)) {
@ -255,17 +258,17 @@ namespace ICSharpCode.ILSpy @@ -255,17 +258,17 @@ namespace ICSharpCode.ILSpy
return IntPtr.Zero;
}
#endregion
public AssemblyList CurrentAssemblyList {
get { return assemblyList; }
}
public event NotifyCollectionChangedEventHandler CurrentAssemblyListChanged;
List<LoadedAssembly> commandLineLoadedAssemblies = new List<LoadedAssembly>();
List<string> nugetPackagesToLoad = new List<string>();
bool HandleCommandLineArguments(CommandLineArguments args)
{
int i = 0;
@ -278,12 +281,12 @@ namespace ICSharpCode.ILSpy @@ -278,12 +281,12 @@ namespace ICSharpCode.ILSpy
i++;
}
}
LoadAssemblies(args.AssembliesToLoad, commandLineLoadedAssemblies, false);
LoadAssemblies(args.AssembliesToLoad, commandLineLoadedAssemblies, focusNode: false);
if (args.Language != null)
sessionSettings.FilterSettings.Language = Languages.GetLanguage(args.Language);
return true;
}
/// <summary>
/// Called on startup or when passed arguments via WndProc from a second instance.
/// In the format case, spySettings is non-null; in the latter it is null.
@ -291,14 +294,15 @@ namespace ICSharpCode.ILSpy @@ -291,14 +294,15 @@ namespace ICSharpCode.ILSpy
void HandleCommandLineArgumentsAfterShowList(CommandLineArguments args, ILSpySettings spySettings = null)
{
if (nugetPackagesToLoad.Count > 0) {
LoadAssemblies(nugetPackagesToLoad, commandLineLoadedAssemblies, focusNode: false);
var relevantPackages = nugetPackagesToLoad.ToArray();
nugetPackagesToLoad.Clear();
// Show the nuget package open dialog after the command line/window message was processed.
Dispatcher.BeginInvoke(new Action(() => LoadAssemblies(relevantPackages, commandLineLoadedAssemblies, focusNode: false)), DispatcherPriority.Normal);
}
var relevantAssemblies = commandLineLoadedAssemblies.ToList();
commandLineLoadedAssemblies.Clear(); // clear references once we don't need them anymore
NavigateOnLaunch(args.NavigateTo, sessionSettings.ActiveTreeViewPath, spySettings, relevantAssemblies);
if (args.Search != null)
{
if (args.Search != null) {
SearchPane.Instance.SearchTerm = args.Search;
SearchPane.Instance.Show();
}
@ -456,12 +460,12 @@ namespace ICSharpCode.ILSpy @@ -456,12 +460,12 @@ namespace ICSharpCode.ILSpy
void OpenAssemblies(ILSpySettings spySettings)
{
HandleCommandLineArgumentsAfterShowList(App.CommandLineArguments, spySettings);
AvalonEditTextOutput output = new AvalonEditTextOutput();
if (FormatExceptions(App.StartupExceptions.ToArray(), output))
decompilerTextView.ShowText(output);
}
bool FormatExceptions(App.ExceptionData[] exceptions, ITextOutput output)
{
var stringBuilder = new StringBuilder();
@ -476,7 +480,7 @@ namespace ICSharpCode.ILSpy @@ -476,7 +480,7 @@ namespace ICSharpCode.ILSpy
{
if (exceptions.Length == 0) return false;
bool first = true;
foreach (var item in exceptions) {
if (first)
first = false;
@ -492,17 +496,17 @@ namespace ICSharpCode.ILSpy @@ -492,17 +496,17 @@ namespace ICSharpCode.ILSpy
} else
output.AppendLine(item.Exception.ToString());
}
return true;
}
#region Update Check
string updateAvailableDownloadUrl;
public void ShowMessageIfUpdatesAvailableAsync(ILSpySettings spySettings, bool forceCheck = false)
{
// Don't check for updates if we're in an MSIX since they work differently
if(WindowsVersionHelper.HasPackageIdentity) {
if (WindowsVersionHelper.HasPackageIdentity) {
return;
}
@ -514,12 +518,12 @@ namespace ICSharpCode.ILSpy @@ -514,12 +518,12 @@ namespace ICSharpCode.ILSpy
}
result.ContinueWith(task => AdjustUpdateUIAfterCheck(task, forceCheck), TaskScheduler.FromCurrentSynchronizationContext());
}
void updatePanelCloseButtonClick(object sender, RoutedEventArgs e)
{
updatePanel.Visibility = Visibility.Collapsed;
}
void downloadOrCheckUpdateButtonClick(object sender, RoutedEventArgs e)
{
if (updateAvailableDownloadUrl != null) {
@ -544,30 +548,29 @@ namespace ICSharpCode.ILSpy @@ -544,30 +548,29 @@ namespace ICSharpCode.ILSpy
}
}
#endregion
public void ShowAssemblyList(string name)
{
ILSpySettings settings = ILSpySettings.Load();
AssemblyList list = this.assemblyListManager.LoadList(settings, name);
//Only load a new list when it is a different one
if (list.ListName != CurrentAssemblyList.ListName)
{
if (list.ListName != CurrentAssemblyList.ListName) {
ShowAssemblyList(list);
}
}
void ShowAssemblyList(AssemblyList assemblyList)
{
history.Clear();
this.assemblyList = assemblyList;
assemblyList.assemblies.CollectionChanged += assemblyList_Assemblies_CollectionChanged;
assemblyListTreeNode = new AssemblyListTreeNode(assemblyList);
assemblyListTreeNode.FilterSettings = sessionSettings.FilterSettings.Clone();
assemblyListTreeNode.Select = SelectNode;
treeView.Root = assemblyListTreeNode;
if (assemblyList.ListName == AssemblyListManager.DefaultListName)
#if DEBUG
this.Title = $"ILSpy {RevisionClass.FullVersion}";
@ -596,7 +599,7 @@ namespace ICSharpCode.ILSpy @@ -596,7 +599,7 @@ namespace ICSharpCode.ILSpy
if (CurrentAssemblyListChanged != null)
CurrentAssemblyListChanged(this, e);
}
void LoadInitialAssemblies()
{
// Called when loading an empty assembly list; so that
@ -614,7 +617,7 @@ namespace ICSharpCode.ILSpy @@ -614,7 +617,7 @@ namespace ICSharpCode.ILSpy
foreach (System.Reflection.Assembly asm in initialAssemblies)
assemblyList.OpenAssembly(asm.Location);
}
void filterSettings_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
RefreshTreeViewFilter();
@ -622,7 +625,7 @@ namespace ICSharpCode.ILSpy @@ -622,7 +625,7 @@ namespace ICSharpCode.ILSpy
DecompileSelectedNodes(recordHistory: false);
}
}
public void RefreshTreeViewFilter()
{
// filterSettings is mutable; but the ILSpyTreeNode filtering assumes that filter settings are immutable.
@ -631,11 +634,11 @@ namespace ICSharpCode.ILSpy @@ -631,11 +634,11 @@ namespace ICSharpCode.ILSpy
if (assemblyListTreeNode != null)
assemblyListTreeNode.FilterSettings = sessionSettings.FilterSettings.Clone();
}
internal AssemblyListTreeNode AssemblyListTreeNode {
get { return assemblyListTreeNode; }
}
#region Node Selection
public void SelectNode(SharpTreeNode obj)
@ -661,7 +664,7 @@ namespace ICSharpCode.ILSpy @@ -661,7 +664,7 @@ namespace ICSharpCode.ILSpy
treeView.SetSelectedNodes(nodes);
}
}
/// <summary>
/// Retrieves a node using the .ToString() representations of its ancestors.
/// </summary>
@ -686,7 +689,7 @@ namespace ICSharpCode.ILSpy @@ -686,7 +689,7 @@ namespace ICSharpCode.ILSpy
else
return node;
}
/// <summary>
/// Gets the .ToString() representation of the node's ancestors.
/// </summary>
@ -702,7 +705,7 @@ namespace ICSharpCode.ILSpy @@ -702,7 +705,7 @@ namespace ICSharpCode.ILSpy
path.Reverse();
return path.ToArray();
}
public ILSpyTreeNode FindTreeNode(object reference)
{
switch (reference) {
@ -724,12 +727,12 @@ namespace ICSharpCode.ILSpy @@ -724,12 +727,12 @@ namespace ICSharpCode.ILSpy
return null;
}
}
public void JumpToReference(object reference)
{
JumpToReferenceAsync(reference).HandleExceptions();
}
/// <summary>
/// Jumps to the specified reference.
/// </summary>
@ -800,7 +803,7 @@ namespace ICSharpCode.ILSpy @@ -800,7 +803,7 @@ namespace ICSharpCode.ILSpy
{
if (fileNames == null)
throw new ArgumentNullException(nameof(fileNames));
if (focusNode)
treeView.UnselectAll();
@ -813,24 +816,29 @@ namespace ICSharpCode.ILSpy @@ -813,24 +816,29 @@ namespace ICSharpCode.ILSpy
foreach (string file in fileNames) {
switch (Path.GetExtension(file)) {
case ".nupkg":
LoadedNugetPackage package = new LoadedNugetPackage(file);
var selectionDialog = new NugetPackageBrowserDialog(package);
selectionDialog.Owner = this;
if (selectionDialog.ShowDialog() != true)
break;
foreach (var entry in selectionDialog.SelectedItems) {
var nugetAsm = assemblyList.OpenAssembly("nupkg://" + file + ";" + entry.Name, entry.Stream, true);
if (nugetAsm != null) {
if (loadedAssemblies != null)
loadedAssemblies.Add(nugetAsm);
else {
var node = assemblyListTreeNode.FindAssemblyNode(nugetAsm);
if (node != null && focusNode) {
treeView.SelectedItems.Add(node);
lastNode = node;
this.handlingNugetPackageSelection = true;
try {
LoadedNugetPackage package = new LoadedNugetPackage(file);
var selectionDialog = new NugetPackageBrowserDialog(package);
selectionDialog.Owner = this;
if (selectionDialog.ShowDialog() != true)
break;
foreach (var entry in selectionDialog.SelectedItems) {
var nugetAsm = assemblyList.OpenAssembly("nupkg://" + file + ";" + entry.Name, entry.Stream, true);
if (nugetAsm != null) {
if (loadedAssemblies != null)
loadedAssemblies.Add(nugetAsm);
else {
var node = assemblyListTreeNode.FindAssemblyNode(nugetAsm);
if (node != null && focusNode) {
treeView.SelectedItems.Add(node);
lastNode = node;
}
}
}
}
} finally {
this.handlingNugetPackageSelection = false;
}
break;
default:
@ -853,7 +861,7 @@ namespace ICSharpCode.ILSpy @@ -853,7 +861,7 @@ namespace ICSharpCode.ILSpy
treeView.FocusNode(lastNode);
}
}
void RefreshCommandExecuted(object sender, ExecutedRoutedEventArgs e)
{
try {
@ -865,13 +873,13 @@ namespace ICSharpCode.ILSpy @@ -865,13 +873,13 @@ namespace ICSharpCode.ILSpy
refreshInProgress = false;
}
}
void SearchCommandExecuted(object sender, ExecutedRoutedEventArgs e)
{
SearchPane.Instance.Show();
}
#endregion
#region Decompile (TreeView_SelectionChanged)
void TreeView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
@ -880,10 +888,10 @@ namespace ICSharpCode.ILSpy @@ -880,10 +888,10 @@ namespace ICSharpCode.ILSpy
if (SelectionChanged != null)
SelectionChanged(sender, e);
}
Task decompilationTask;
bool ignoreDecompilationRequests;
void DecompileSelectedNodes(DecompilerTextViewState state = null, bool recordHistory = true)
{
if (ignoreDecompilationRequests)
@ -891,14 +899,14 @@ namespace ICSharpCode.ILSpy @@ -891,14 +899,14 @@ namespace ICSharpCode.ILSpy
if (treeView.SelectedItems.Count == 0 && refreshInProgress)
return;
if (recordHistory) {
var dtState = decompilerTextView.GetState();
if(dtState != null)
if (dtState != null)
history.UpdateCurrent(new NavigationState(dtState));
history.Record(new NavigationState(treeView.SelectedItems.OfType<SharpTreeNode>()));
}
if (treeView.SelectedItems.Count == 1) {
ILSpyTreeNode node = treeView.SelectedItem as ILSpyTreeNode;
if (node != null && node.View(decompilerTextView))
@ -927,7 +935,7 @@ namespace ICSharpCode.ILSpy @@ -927,7 +935,7 @@ namespace ICSharpCode.ILSpy
refreshInProgress = false;
}
}
public DecompilerTextView TextView {
get { return decompilerTextView; }
}
@ -950,7 +958,7 @@ namespace ICSharpCode.ILSpy @@ -950,7 +958,7 @@ namespace ICSharpCode.ILSpy
e.Handled = true;
e.CanExecute = history.CanNavigateBack;
}
void BackCommandExecuted(object sender, ExecutedRoutedEventArgs e)
{
if (history.CanNavigateBack) {
@ -958,13 +966,13 @@ namespace ICSharpCode.ILSpy @@ -958,13 +966,13 @@ namespace ICSharpCode.ILSpy
NavigateHistory(false);
}
}
void ForwardCommandCanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.Handled = true;
e.CanExecute = history.CanNavigateForward;
}
void ForwardCommandExecuted(object sender, ExecutedRoutedEventArgs e)
{
if (history.CanNavigateForward) {
@ -972,18 +980,17 @@ namespace ICSharpCode.ILSpy @@ -972,18 +980,17 @@ namespace ICSharpCode.ILSpy
NavigateHistory(true);
}
}
void NavigateHistory(bool forward)
{
var dtState = decompilerTextView.GetState();
if(dtState != null)
if (dtState != null)
history.UpdateCurrent(new NavigationState(dtState));
var newState = forward ? history.GoForward() : history.GoBack();
ignoreDecompilationRequests = true;
treeView.SelectedItems.Clear();
foreach (var node in newState.TreeNodes)
{
foreach (var node in newState.TreeNodes) {
treeView.SelectedItems.Add(node);
}
if (newState.TreeNodes.Any())
@ -991,9 +998,9 @@ namespace ICSharpCode.ILSpy @@ -991,9 +998,9 @@ namespace ICSharpCode.ILSpy
ignoreDecompilationRequests = false;
DecompileSelectedNodes(newState.ViewState, false);
}
#endregion
protected override void OnStateChanged(EventArgs e)
{
base.OnStateChanged(e);
@ -1001,7 +1008,7 @@ namespace ICSharpCode.ILSpy @@ -1001,7 +1008,7 @@ namespace ICSharpCode.ILSpy
if (this.WindowState != System.Windows.WindowState.Minimized)
sessionSettings.WindowState = this.WindowState;
}
protected override void OnClosing(CancelEventArgs e)
{
base.OnClosing(e);
@ -1032,7 +1039,7 @@ namespace ICSharpCode.ILSpy @@ -1032,7 +1039,7 @@ namespace ICSharpCode.ILSpy
return loadedAssy.FileName;
}
#region Top/Bottom Pane management
/// <summary>
@ -1046,14 +1053,12 @@ namespace ICSharpCode.ILSpy @@ -1046,14 +1053,12 @@ namespace ICSharpCode.ILSpy
var pane2Height = pane2Row.Height;
//only star height values are normalized.
if (!pane1Height.IsStar || !pane2Height.IsStar)
{
if (!pane1Height.IsStar || !pane2Height.IsStar) {
return;
}
var totalHeight = pane1Height.Value + pane2Height.Value;
if (totalHeight == 0)
{
if (totalHeight == 0) {
return;
}
@ -1080,20 +1085,20 @@ namespace ICSharpCode.ILSpy @@ -1080,20 +1085,20 @@ namespace ICSharpCode.ILSpy
}
topPane.Visibility = Visibility.Visible;
}
void TopPane_CloseButtonClicked(object sender, EventArgs e)
{
sessionSettings.TopPaneSplitterPosition = topPaneRow.Height.Value / (topPaneRow.Height.Value + textViewRow.Height.Value);
topPaneRow.MinHeight = 0;
topPaneRow.Height = new GridLength(0);
topPane.Visibility = Visibility.Collapsed;
IPane pane = topPane.Content as IPane;
topPane.Content = null;
if (pane != null)
pane.Closed();
}
public void ShowInBottomPane(string title, object content)
{
bottomPaneRow.MinHeight = 100;
@ -1113,26 +1118,26 @@ namespace ICSharpCode.ILSpy @@ -1113,26 +1118,26 @@ namespace ICSharpCode.ILSpy
}
bottomPane.Visibility = Visibility.Visible;
}
void BottomPane_CloseButtonClicked(object sender, EventArgs e)
{
sessionSettings.BottomPaneSplitterPosition = bottomPaneRow.Height.Value / (bottomPaneRow.Height.Value + textViewRow.Height.Value);
bottomPaneRow.MinHeight = 0;
bottomPaneRow.Height = new GridLength(0);
bottomPane.Visibility = Visibility.Collapsed;
IPane pane = bottomPane.Content as IPane;
bottomPane.Content = null;
if (pane != null)
pane.Closed();
}
#endregion
public void UnselectAll()
{
treeView.UnselectAll();
}
public void SetStatus(string status, Brush foreground)
{
if (this.statusBar.Visibility == Visibility.Collapsed)
@ -1140,12 +1145,12 @@ namespace ICSharpCode.ILSpy @@ -1140,12 +1145,12 @@ namespace ICSharpCode.ILSpy
this.StatusLabel.Foreground = foreground;
this.StatusLabel.Text = status;
}
public ItemCollection GetMainMenuItems()
{
return mainMenu.Items;
}
public ItemCollection GetToolBarItems()
{
return toolBar.Items;

2
ILSpy/Properties/AssemblyInfo.template.cs

@ -39,7 +39,7 @@ internal static class RevisionClass @@ -39,7 +39,7 @@ internal static class RevisionClass
public const string Minor = "0";
public const string Build = "0";
public const string Revision = "$INSERTREVISION$";
public const string VersionName = "rc1";
public const string VersionName = null;
public const string FullVersion = Major + "." + Minor + "." + Build + ".$INSERTREVISION$$INSERTBRANCHPOSTFIX$$INSERTVERSIONNAMEPOSTFIX$";
}

9
ILSpy/Properties/Resources.Designer.cs generated

@ -511,6 +511,15 @@ namespace ICSharpCode.ILSpy.Properties { @@ -511,6 +511,15 @@ namespace ICSharpCode.ILSpy.Properties {
}
}
/// <summary>
/// Looks up a localized string similar to Always show enum member values.
/// </summary>
public static string DecompilerSettings_AlwaysShowEnumMemberValues {
get {
return ResourceManager.GetString("DecompilerSettings.AlwaysShowEnumMemberValues", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Always use braces.
/// </summary>

3
ILSpy/Properties/Resources.resx

@ -754,6 +754,9 @@ Are you sure you want to continue?</value> @@ -754,6 +754,9 @@ Are you sure you want to continue?</value>
<data name="DecompilerSettings.RemoveDeadStores" xml:space="preserve">
<value>Remove dead stores (use with caution!)</value>
</data>
<data name="DecompilerSettings.AlwaysShowEnumMemberValues" xml:space="preserve">
<value>Always show enum member values</value>
</data>
<data name="ShowPublicOnlyTypesMembers" xml:space="preserve">
<value>Show only public types and members</value>
</data>

4
README.md

@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
ILSpy is the open-source .NET assembly browser and decompiler.
Download: [latest release](https://github.com/icsharpcode/ILSpy/releases) | [latest CI build (master)](https://ci.appveyor.com/api/projects/icsharpcode/ilspy/artifacts/ILSpy_binaries.zip?branch=master&job=Configuration%3A+Release)
Download: [latest release](https://github.com/icsharpcode/ILSpy/releases) | [latest CI build (master)](https://ci.appveyor.com/api/projects/icsharpcode/ilspy/artifacts/ILSpy_binaries.zip?branch=master&job=Configuration%3A+Release) | [Microsoft Store (RC & RTM versions only)](https://www.microsoft.com/store/apps/9MXFBKFVSQ13)
CI Build Nuget Feed (master): https://ci.appveyor.com/nuget/ilspy-masterfeed
@ -11,7 +11,7 @@ Decompiler Frontends @@ -11,7 +11,7 @@ Decompiler Frontends
Aside from the WPF UI ILSpy (downloadable via Releases, see also [plugins](https://github.com/icsharpcode/ILSpy/wiki/Plugins)), the following other frontends are available:
* Visual Studio 2017 extension [marketplace](https://marketplace.visualstudio.com/items?itemName=SharpDevelopTeam.ILSpy)
* Visual Studio 2017/2019 extension [marketplace](https://marketplace.visualstudio.com/items?itemName=SharpDevelopTeam.ILSpy)
* Visual Studio Code Extension [repository](https://github.com/icsharpcode/ilspy-vscode) | [marketplace](https://marketplace.visualstudio.com/items?itemName=icsharpcode.ilspy-vscode)
* [ICSharpCode.Decompiler](https://www.nuget.org/packages/ICSharpCode.Decompiler/) NuGet for your own projects
* Linux/Mac/Windows ILSpy UI based on [Avalonia](http://www.avaloniaui.net/) - check out https://github.com/icsharpcode/AvaloniaILSpy

2
azure-pipelines.yml

@ -9,7 +9,7 @@ pr: @@ -9,7 +9,7 @@ pr:
variables:
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true
BuildPlatform: Any CPU
BuildPlatform: Any CPU
jobs:
- job: Build

2
global.json

@ -3,6 +3,6 @@ @@ -3,6 +3,6 @@
"MSBuild.Sdk.Extras": "2.0.24"
},
"sdk": {
"version": "3.0.100-preview9"
"version": "3.0.100-rc1"
}
}

Loading…
Cancel
Save