Exemple #1
0
        public override object VisitCastExpression(CastExpression castExpression, object data)
        {
            base.VisitCastExpression(castExpression, data);
            // Handle methodof
            Match m = getMethodOrConstructorFromHandlePattern.Match(castExpression);

            if (m.Success)
            {
                var     ilRanges = castExpression.GetAllRecursiveILRanges();
                IMethod method   = m.Get <AstNode>("method").Single().Annotation <IMethod>();
                if (method != null && m.Has("declaringType"))
                {
                    Expression newNode = m.Get <AstType>("declaringType").Single().Detach().Member(method.Name, method);
                    newNode = newNode.Invoke(method.MethodSig.GetParameters().Select(p => new TypeReferenceExpression(AstBuilder.ConvertType(p, stringBuilder))));
                    newNode.AddAnnotation(method);
                    m.Get <AstNode>("method").Single().ReplaceWith(newNode);
                }
                castExpression.ReplaceWith(m.Get <AstNode>("ldtokenNode").Single().WithAnnotation(ilRanges));
            }
            return(null);
        }