Browse Source

add support for usage of event accessors

pull/18/head
Siegfried Pammer 14 years ago
parent
commit
bce0b943f8
  1. 30
      src/AddIns/Analysis/CodeQuality/Engine/AssemblyAnalyzer.cs
  2. 5
      src/AddIns/Analysis/CodeQuality/Engine/ILAnalyzer.cs

30
src/AddIns/Analysis/CodeQuality/Engine/AssemblyAnalyzer.cs

@ -103,6 +103,21 @@ namespace ICSharpCode.CodeQuality.Engine @@ -103,6 +103,21 @@ namespace ICSharpCode.CodeQuality.Engine
var cecilObj = loader.GetCecilObject((IUnresolvedEvent)@event.UnresolvedMember);
if (cecilObj != null)
cecilMappings[cecilObj] = @event;
if (@event.CanAdd) {
var cecilMethodObj = loader.GetCecilObject((IUnresolvedMethod)@event.AddAccessor.UnresolvedMember);
if (cecilMethodObj != null)
cecilMappings[cecilMethodObj] = @event;
}
if (@event.CanInvoke) {
var cecilMethodObj = loader.GetCecilObject((IUnresolvedMethod)@event.InvokeAccessor.UnresolvedMember);
if (cecilMethodObj != null)
cecilMappings[cecilMethodObj] = @event;
}
if (@event.CanRemove) {
var cecilMethodObj = loader.GetCecilObject((IUnresolvedMethod)@event.RemoveAccessor.UnresolvedMember);
if (cecilMethodObj != null)
cecilMappings[cecilMethodObj] = @event;
}
tn.AddChild(node);
}
}
@ -158,6 +173,21 @@ namespace ICSharpCode.CodeQuality.Engine @@ -158,6 +173,21 @@ namespace ICSharpCode.CodeQuality.Engine
ReportProgress(++i / (double)count);
var node = element.Value;
var @event = element.Key;
if (@event.CanAdd) {
var cecilObj = loader.GetCecilObject((IUnresolvedMethod)@event.AddAccessor.UnresolvedMember);
if (cecilObj != null)
analyzer.Analyze(cecilObj.Body, node);
}
if (@event.CanInvoke) {
var cecilObj = loader.GetCecilObject((IUnresolvedMethod)@event.InvokeAccessor.UnresolvedMember);
if (cecilObj != null)
analyzer.Analyze(cecilObj.Body, node);
}
if (@event.CanRemove) {
var cecilObj = loader.GetCecilObject((IUnresolvedMethod)@event.RemoveAccessor.UnresolvedMember);
if (cecilObj != null)
analyzer.Analyze(cecilObj.Body, node);
}
AddRelationshipsForType(node, @event.ReturnType);
AddRelationshipsForAttributes(@event.Attributes, node);
}

5
src/AddIns/Analysis/CodeQuality/Engine/ILAnalyzer.cs

@ -48,6 +48,9 @@ namespace ICSharpCode.CodeQuality.Engine @@ -48,6 +48,9 @@ namespace ICSharpCode.CodeQuality.Engine
if (md.IsGetter || md.IsSetter) {
var propertyNode = mappings.propertyMappings[(IProperty)mappings.cecilMappings[md]];
analyzedNode.AddRelationship(propertyNode);
} else if (md.IsAddOn || md.IsRemoveOn) {
var eventNode = mappings.eventMappings[(IEvent)mappings.cecilMappings[md]];
analyzedNode.AddRelationship(eventNode);
} else {
var methodNode = mappings.methodMappings[(IMethod)mappings.cecilMappings[md]];
analyzedNode.AddRelationship(methodNode);
@ -63,7 +66,7 @@ namespace ICSharpCode.CodeQuality.Engine @@ -63,7 +66,7 @@ namespace ICSharpCode.CodeQuality.Engine
}
}
public object ReadOperand(Instruction instruction)
object ReadOperand(Instruction instruction)
{
while (instruction.Operand is Instruction)
instruction = (Instruction)instruction.Operand;

Loading…
Cancel
Save