blob: 0ed9270c16c983a5faf21e0653cf7fb9e795bbec (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Cci;
using Microsoft.Cci.MutableCodeModel;
namespace BytecodeTranslator.Phone {
class PhoneControlFeedbackCodeTraverser : CodeTraverser {
private IMetadataReaderHost host;
public PhoneControlFeedbackCodeTraverser(IMetadataReaderHost host) : base() {
this.host = host;
}
public override void TraverseChildren(IMethodCall methodCall) {
if (PhoneCodeHelper.instance().PhoneFeedbackToggled) {
// check for handlers we do not wish to add feedback checks to
if (methodCall.MethodToCall.Name.Value.StartsWith("add_")) {
string eventName = methodCall.MethodToCall.Name.Value.Remove(0, "add_".Length);
if (PhoneCodeHelper.IgnoredEvents.Contains(eventName)) {
IMethodReference eventHandler = null;
foreach (IExpression arg in methodCall.Arguments) {
ICreateDelegateInstance createDelegate = arg as ICreateDelegateInstance;
if (createDelegate == null)
continue;
ITypeReference typeRef = createDelegate.Type;
if (!typeRef.isRoutedEventHandlerClass(host))
continue;
eventHandler = createDelegate.MethodToCallViaDelegate;
break;
}
if (eventHandler != null) {
INamespaceTypeReference namedType = eventHandler.ContainingType.ResolvedType as INamespaceTypeReference;
if (namedType != null) {
INamespaceTypeDefinition namedTypeDef = namedType.ResolvedType;
if (namedTypeDef != null) {
PhoneCodeHelper.instance().ignoreEventHandler(namedTypeDef.ContainingUnitNamespace.Name + "." + namedTypeDef.Name + "." + eventHandler.Name);
}
}
}
}
}
}
}
}
class PhoneControlFeedbackMetadataTraverser : MetadataTraverser {
private IMetadataReaderHost host;
public PhoneControlFeedbackMetadataTraverser(IMetadataReaderHost host) : base() {
this.host = host;
}
public override void TraverseChildren(IMethodDefinition method) {
PhoneControlFeedbackCodeTraverser codeTraverser = new PhoneControlFeedbackCodeTraverser(host);
codeTraverser.TraverseChildren(method);
}
}
}
|