internal AnalysisInvocationExpession(MethodDescriptor caller, AnalysisCallNode callNode, IList<PropGraphNodeDescriptor> arguments, VariableNode lhs) { Caller = caller; Arguments = arguments; LHS = lhs; IsStatic = true; CallNode = callNode; InstatiatedTypes = new HashSet<TypeDescriptor>(); }
internal DelegateCallInfo(MethodDescriptor caller, AnalysisCallNode callNode, DelegateVariableNode calleeDelegate, PropGraphNodeDescriptor receiver, IList<PropGraphNodeDescriptor> arguments, VariableNode lhs) : base(caller, callNode, arguments, lhs) { Caller = caller; CalleeDelegate = calleeDelegate; Receiver = receiver; Arguments = arguments; LHS = lhs; }
private async Task<ISet<MethodDescriptor>> GetDelegateCalleesAsync(VariableNode delegateNode, PropagationGraph propGraph, ICodeProvider codeProvider) { var callees = new HashSet<MethodDescriptor>(); var typeDescriptors = propGraph.GetTypes(delegateNode); foreach (var delegateInstance in propGraph.GetDelegates(delegateNode)) { if (typeDescriptors.Count() > 0) { foreach (var typeDescriptor in typeDescriptors) { // TO-DO!!! // Ugly: I'll fix it //var aMethod = delegateInstance.FindMethodImplementation(type); var aMethod = await codeProvider.FindMethodImplementationAsync(delegateInstance, typeDescriptor); callees.Add(aMethod); } } else { // if Count is 0, it is a delegate that do not came form an instance variable callees.Add(delegateInstance); } } return callees; }
internal CallInfo(MethodDescriptor caller, AnalysisCallNode callNode, MethodDescriptor callee, IList<PropGraphNodeDescriptor> arguments, VariableNode lhs, bool isConstructor) : base(caller, callNode, arguments, lhs) { Caller = caller; Callee = callee; Arguments = arguments; LHS = lhs; Receiver = default(VariableNode); IsStatic = true; IsConstructor = isConstructor; }