Пример #1
0
        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;
                }
            }
        }
Пример #2
0
        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;
                    }
                }
            }
        }
Пример #3
0
        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) };
        }
Пример #4
0
 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;
         }
     }
 }
Пример #5
0
        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);
            }
        }
Пример #6
0
        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);
            }
        }
Пример #7
0
        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;
            }
        }
Пример #8
0
 protected abstract void OnInvocationExpressionMatched(ILTranslator sender, VisitedEventArgs <InvocationExpression> e);
Пример #9
0
 protected abstract void OnMethodDeclarationMatched(ILTranslator sender, VisitedEventArgs <MethodDeclaration> e);