private void Translator_VisitedAssignmentExpression(object sender, VisitedEventArgs <ICSharpCode.NRefactory.CSharp.AssignmentExpression> e) { if (e.Handled || e.Results.Count != 1) { return; } var ae = e.Results[0] as E.AssignmentExpression; if (ae == null) { return; } if (e.Node.Operator == AssignmentOperatorType.Add || e.Node.Operator == AssignmentOperatorType.Subtract) { var t = e.Context.ResoleClrType(e.Node.Left); if (t != null && typeof(MulticastDelegate).IsAssignableFrom(t)) { e.Results[0] = TranslateAssignmentExpression(ae); e.Handled = true; } } }
protected override void OnInvocationExpressionMatched(ILTranslator sender, VisitedEventArgs <InvocationExpression> e) { if (e.Results.Count() == 1) { var call = e.Results.Single() as E.CallExpression; if (call != null) { var pe = call.Target as E.PropertyExpression; if (pe != null) { pe.Property = _ResultMethodName; if (_ResultTypeName != null) { pe.Object = new E.IdentifierExpression() { Name = _ResultTypeName }; } e.Handled = true; } } } }
private void Translator_VisitedAssignmentExpression(object sender, VisitedEventArgs <ICSharpCode.NRefactory.CSharp.AssignmentExpression> e) { if (e.Handled || e.Results.Count != 1) { return; } var ae = e.Results[0] as E.AssignmentExpression; if (ae == null) { return; } var op = e.Node.Operator; var isAdd = op == AssignmentOperatorType.Add; if (!isAdd && op != AssignmentOperatorType.Subtract) { return; } var mre = e.Node.Left as MemberReferenceExpression; if (mre == null) { return; } var ed = mre.Annotation <EventDefinition>(); if (ed == null) { return; } var pe = ae.Target as E.PropertyExpression; Expression tar; if (pe != null) { tar = pe.Object; } else { var t = mre.Target.AcceptVisitor((ILTranslator)sender, e.Context).ToArray(); if (t.Length != 1) { return; } tar = (Expression)t[0]; } e.Results = new[] { tar.Property((isAdd ? ADD_PREFIX : REMOVE_PREFIX) + ed.Name).Call(ae.Value) }; }
protected override void OnMethodDeclarationMatched(ILTranslator sender, VisitedEventArgs <MethodDeclaration> e) { if (e.Results.Count() == 1) { var method = e.Results.Single() as D.MethodDeclaration; if (method != null) { method.MethodName = _ResultMethodName; e.Handled = true; } } }
private void Translator_VisitedInvocationExpression(object sender, VisitedEventArgs <InvocationExpression> e) { if (e.Handled) { return; } var mr = e.Node.Annotation <MethodReference>(); if (TargetMethod.IsEquivalentTo(mr) || (TargetType != null && TargetType.IsBaseTypeOf(mr.DeclaringType) && TargetMethodName == mr.Name)) { OnInvocationExpressionMatched((ILTranslator)sender, e); } }
private void Translator_VisitedMethodDeclaration(object sender, VisitedEventArgs <MethodDeclaration> e) { if (e.Handled) { return; } var mr = e.Node.Annotation <MethodDefinition>(); if ((TargetMethod != null && TargetMethod.IsEquivalentTo(mr)) || (TargetType != null && TargetType.IsBaseTypeOf(mr.DeclaringType) && TargetMethodName == mr.Name)) { OnMethodDeclarationMatched((ILTranslator)sender, e); } }
private void Translator_VisitedInvocationExpression(object sender, VisitedEventArgs <ICSharpCode.NRefactory.CSharp.InvocationExpression> e) { if (e.Handled || e.Results.Count != 1) { return; } var ce = e.Results[0] as E.CallExpression; if (ce == null) { return; } var t = e.Context.ResoleClrType(e.Node.Target); if (t != null && typeof(MulticastDelegate).IsAssignableFrom(t)) { e.Results[0] = TranslateInvocationExpression(ce); e.Handled = true; } }
protected abstract void OnInvocationExpressionMatched(ILTranslator sender, VisitedEventArgs <InvocationExpression> e);
protected abstract void OnMethodDeclarationMatched(ILTranslator sender, VisitedEventArgs <MethodDeclaration> e);