|
|
@ -761,7 +761,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms |
|
|
|
var parent = identifier.Parent; |
|
|
|
var parent = identifier.Parent; |
|
|
|
var mrr = parent.Annotation<MemberResolveResult>(); |
|
|
|
var mrr = parent.Annotation<MemberResolveResult>(); |
|
|
|
var field = mrr?.Member as IField; |
|
|
|
var field = mrr?.Member as IField; |
|
|
|
if (field == null) |
|
|
|
if (field == null || field.Accessibility != Accessibility.Private) |
|
|
|
return null; |
|
|
|
return null; |
|
|
|
foreach (var ev in field.DeclaringType.GetEvents(null, GetMemberOptions.IgnoreInheritedMembers)) |
|
|
|
foreach (var ev in field.DeclaringType.GetEvents(null, GetMemberOptions.IgnoreInheritedMembers)) |
|
|
|
{ |
|
|
|
{ |
|
|
@ -999,7 +999,9 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms |
|
|
|
if (!ev.PrivateImplementationType.IsNull) |
|
|
|
if (!ev.PrivateImplementationType.IsNull) |
|
|
|
return null; |
|
|
|
return null; |
|
|
|
const Modifiers withoutBody = Modifiers.Abstract | Modifiers.Extern; |
|
|
|
const Modifiers withoutBody = Modifiers.Abstract | Modifiers.Extern; |
|
|
|
if ((ev.Modifiers & withoutBody) == 0 && ev.GetSymbol() is IEvent symbol) |
|
|
|
if (ev.GetSymbol() is not IEvent symbol) |
|
|
|
|
|
|
|
return null; |
|
|
|
|
|
|
|
if ((ev.Modifiers & withoutBody) == 0) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (!CheckAutomaticEventV4AggressivelyInlined(ev) && !CheckAutomaticEventV4(ev) && !CheckAutomaticEventV2(ev) && !CheckAutomaticEventV4MCS(ev)) |
|
|
|
if (!CheckAutomaticEventV4AggressivelyInlined(ev) && !CheckAutomaticEventV4(ev) && !CheckAutomaticEventV2(ev) && !CheckAutomaticEventV4MCS(ev)) |
|
|
|
return null; |
|
|
|
return null; |
|
|
@ -1018,7 +1020,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms |
|
|
|
ed.CopyAnnotationsFrom(ev); |
|
|
|
ed.CopyAnnotationsFrom(ev); |
|
|
|
|
|
|
|
|
|
|
|
var fieldDecl = ev.Parent?.Children.OfType<FieldDeclaration>() |
|
|
|
var fieldDecl = ev.Parent?.Children.OfType<FieldDeclaration>() |
|
|
|
.FirstOrDefault(fd => CSharpDecompiler.IsEventBackingFieldName(fd.Variables.Single().Name, ev.Name, out _)); |
|
|
|
.FirstOrDefault(IsEventBackingField); |
|
|
|
if (fieldDecl != null) |
|
|
|
if (fieldDecl != null) |
|
|
|
{ |
|
|
|
{ |
|
|
|
fieldDecl.Remove(); |
|
|
|
fieldDecl.Remove(); |
|
|
@ -1033,6 +1035,17 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms |
|
|
|
|
|
|
|
|
|
|
|
ev.ReplaceWith(ed); |
|
|
|
ev.ReplaceWith(ed); |
|
|
|
return ed; |
|
|
|
return ed; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool IsEventBackingField(FieldDeclaration fd) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (fd.Variables.Count > 1) |
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
if (fd.GetSymbol() is not IField f) |
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
return f.Accessibility == Accessibility.Private |
|
|
|
|
|
|
|
&& symbol.ReturnType.Equals(f.ReturnType) |
|
|
|
|
|
|
|
&& CSharpDecompiler.IsEventBackingFieldName(f.Name, ev.Name, out _); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|