Browse Source

Fix decompilation of abstract events.

pull/100/head
Daniel Grunwald 15 years ago
parent
commit
33625c0cc5
  1. 58
      ICSharpCode.Decompiler/Ast/AstBuilder.cs

58
ICSharpCode.Decompiler/Ast/AstBuilder.cs

@ -720,31 +720,43 @@ namespace ICSharpCode.Decompiler.Ast
ConvertCustomAttributes(astProp, propDef); ConvertCustomAttributes(astProp, propDef);
return astProp; return astProp;
} }
CustomEventDeclaration CreateEvent(EventDefinition eventDef) AttributedNode CreateEvent(EventDefinition eventDef)
{ {
CustomEventDeclaration astEvent = new CustomEventDeclaration(); if (eventDef.AddMethod != null && eventDef.AddMethod.IsAbstract) {
ConvertCustomAttributes(astEvent, eventDef); // An abstract event cannot be custom
astEvent.AddAnnotation(eventDef); EventDeclaration astEvent = new EventDeclaration();
astEvent.Name = CleanName(eventDef.Name); ConvertCustomAttributes(astEvent, eventDef);
astEvent.ReturnType = ConvertType(eventDef.EventType, eventDef); astEvent.AddAnnotation(eventDef);
if (eventDef.AddMethod == null || !eventDef.AddMethod.HasOverrides) astEvent.Variables.Add(new VariableInitializer(CleanName(eventDef.Name)));
astEvent.Modifiers = ConvertModifiers(eventDef.AddMethod); astEvent.ReturnType = ConvertType(eventDef.EventType, eventDef);
else if (!eventDef.DeclaringType.IsInterface)
astEvent.PrivateImplementationType = ConvertType(eventDef.AddMethod.Overrides.First().DeclaringType); astEvent.Modifiers = ConvertModifiers(eventDef.AddMethod);
if (eventDef.AddMethod != null) { return astEvent;
astEvent.AddAccessor = new Accessor { } else {
Body = AstMethodBodyBuilder.CreateMethodBody(eventDef.AddMethod, context) CustomEventDeclaration astEvent = new CustomEventDeclaration();
}.WithAnnotation(eventDef.AddMethod); ConvertCustomAttributes(astEvent, eventDef);
ConvertAttributes(astEvent.AddAccessor, eventDef.AddMethod); astEvent.AddAnnotation(eventDef);
} astEvent.Name = CleanName(eventDef.Name);
if (eventDef.RemoveMethod != null) { astEvent.ReturnType = ConvertType(eventDef.EventType, eventDef);
astEvent.RemoveAccessor = new Accessor { if (eventDef.AddMethod == null || !eventDef.AddMethod.HasOverrides)
Body = AstMethodBodyBuilder.CreateMethodBody(eventDef.RemoveMethod, context) astEvent.Modifiers = ConvertModifiers(eventDef.AddMethod);
}.WithAnnotation(eventDef.RemoveMethod); else
ConvertAttributes(astEvent.RemoveAccessor, eventDef.RemoveMethod); astEvent.PrivateImplementationType = ConvertType(eventDef.AddMethod.Overrides.First().DeclaringType);
if (eventDef.AddMethod != null) {
astEvent.AddAccessor = new Accessor {
Body = AstMethodBodyBuilder.CreateMethodBody(eventDef.AddMethod, context)
}.WithAnnotation(eventDef.AddMethod);
ConvertAttributes(astEvent.AddAccessor, eventDef.AddMethod);
}
if (eventDef.RemoveMethod != null) {
astEvent.RemoveAccessor = new Accessor {
Body = AstMethodBodyBuilder.CreateMethodBody(eventDef.RemoveMethod, context)
}.WithAnnotation(eventDef.RemoveMethod);
ConvertAttributes(astEvent.RemoveAccessor, eventDef.RemoveMethod);
}
return astEvent;
} }
return astEvent;
} }
FieldDeclaration CreateField(FieldDefinition fieldDef) FieldDeclaration CreateField(FieldDefinition fieldDef)

Loading…
Cancel
Save