diff --git a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/InterfaceTests.cs b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/InterfaceTests.cs index 622b1ee42..405bad19a 100644 --- a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/InterfaceTests.cs +++ b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/InterfaceTests.cs @@ -67,9 +67,35 @@ namespace ICSharpCode.Decompiler.Tests.TestCases.Pretty public interface IA2 : IA { #if CS80 + int IA.Property3 { + get { + return 0; + } + set { + } + } + + event EventHandler IA.MyEvent { + add { + } + remove { + } + } + + new event EventHandler MyEvent { + add { + } + remove { + } + } + void IA.InternalMethod() { } + + new void Method() + { + } #endif } public interface IB diff --git a/ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs b/ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs index 2810eb948..00af12fbe 100644 --- a/ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs +++ b/ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs @@ -1857,16 +1857,19 @@ namespace ICSharpCode.Decompiler.CSharp var watch = System.Diagnostics.Stopwatch.StartNew(); try { + bool adderHasBody = ev.CanAdd && ev.AddAccessor.HasBody; + bool removerHasBody = ev.CanRemove && ev.RemoveAccessor.HasBody; var typeSystemAstBuilder = CreateAstBuilder(decompileRun.Settings); - typeSystemAstBuilder.UseCustomEvents = ev.DeclaringTypeDefinition.Kind != TypeKind.Interface; + typeSystemAstBuilder.UseCustomEvents = ev.DeclaringTypeDefinition.Kind != TypeKind.Interface + || ev.IsExplicitInterfaceImplementation + || adderHasBody + || removerHasBody; var eventDecl = typeSystemAstBuilder.ConvertEntity(ev); int lastDot = ev.Name.LastIndexOf('.'); if (ev.IsExplicitInterfaceImplementation) { eventDecl.Name = ev.Name.Substring(lastDot + 1); } - bool adderHasBody = ev.CanAdd && ev.AddAccessor.HasBody; - bool removerHasBody = ev.CanRemove && ev.RemoveAccessor.HasBody; if (adderHasBody) { DecompileBody(ev.AddAccessor, ((CustomEventDeclaration)eventDecl).AddAccessor, decompileRun, decompilationContext); diff --git a/ICSharpCode.Decompiler/CSharp/Transforms/PatternStatementTransform.cs b/ICSharpCode.Decompiler/CSharp/Transforms/PatternStatementTransform.cs index aaa032971..006f4c562 100644 --- a/ICSharpCode.Decompiler/CSharp/Transforms/PatternStatementTransform.cs +++ b/ICSharpCode.Decompiler/CSharp/Transforms/PatternStatementTransform.cs @@ -992,7 +992,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms if (!ev.PrivateImplementationType.IsNull) return null; const Modifiers withoutBody = Modifiers.Abstract | Modifiers.Extern; - if ((ev.Modifiers & withoutBody) == 0 && ev.GetSymbol() is IEvent symbol && symbol.DeclaringType.Kind != TypeKind.Interface) + if ((ev.Modifiers & withoutBody) == 0 && ev.GetSymbol() is IEvent symbol) { if (!CheckAutomaticEventV4AggressivelyInlined(ev) && !CheckAutomaticEventV4(ev) && !CheckAutomaticEventV2(ev) && !CheckAutomaticEventV4MCS(ev)) return null;