public MemberReference(NRefactory.MemberReferenceExpression memberReference, IScope scope, INRefcatoryExpressionVisitor visitor)
     : base(scope, visitor)
 {
     _memberReferenceExpression = memberReference;
     ResolveMember();
     BuildExpression();
 }
Exemplo n.º 2
0
 public override void VisitMemberReferenceExpression(ICSharpCode.NRefactory.CSharp.MemberReferenceExpression memberReferenceExpression)
 {
     OnVisitMemberReference(memberReferenceExpression);
     foreach (var astNode in memberReferenceExpression.Children)
     {
         astNode.AcceptVisitor(this);
     }
 }
Exemplo n.º 3
0
        private object EvaluateMemberReferenceExpression(ICSharpCode.NRefactory.CSharp.MemberReferenceExpression memberReferenceExpression, CodeContext codeContext, ExpressionParseType parseType)
        {
            object container = EvaluateExpression(memberReferenceExpression.Target, codeContext, ExpressionParseType.GetReference);

            if (container == null)
            {
                // Couldn't get a member reference, so it could be a variable on an Element, so let's try a non-reference get
                container = EvaluateExpression(memberReferenceExpression.Target, codeContext, ExpressionParseType.Evaluate);
            }
            string memberName = memberReferenceExpression.MemberName;

            object foundValue = GetObjectFromContainerAndMemberName(container, memberName, codeContext, parseType);

            return(foundValue);
        }
 public MemberReference(NRefactory.MemberReferenceExpression memberReference, IScope scope, INRefcatoryExpressionVisitor visitor)
     : base(scope, visitor) {
     _memberReferenceExpression = memberReference;
     ResolveMember();
     BuildExpression();
 }
Exemplo n.º 5
0
        private void GetMethodInfo(ICSharpCode.NRefactory.CSharp.Expression expression, List <object> argumentValues, Type[] types, CodeContext codeContext, string invocation, object container, out MethodInfo methodInfo)
        {
            methodInfo = null;



            if (expression is ICSharpCode.NRefactory.CSharp.IdentifierExpression)
            {
                methodInfo = container.GetType().GetMethod(invocation, types);
            }
            else if (expression is ICSharpCode.NRefactory.CSharp.MemberReferenceExpression)
            {
                ICSharpCode.NRefactory.CSharp.MemberReferenceExpression mre = expression as ICSharpCode.NRefactory.CSharp.MemberReferenceExpression;

                bool doTypesHaveNull = false;
                foreach (var item in types)
                {
                    if (item == null)
                    {
                        doTypesHaveNull = true;
                    }
                }

                Type typeToCallGetMethodOn;

                if (container is Type)
                {
                    typeToCallGetMethodOn = (container as Type);
                }
                else if (container is TypeReference)
                {
                    typeToCallGetMethodOn = (container as TypeReference).Type;
                }
                else
                {
                    typeToCallGetMethodOn = container.GetType();
                }
                if (doTypesHaveNull)
                {
                    // Let's hope there's no ambiguity or else we're in trouble...
                    methodInfo = typeToCallGetMethodOn.GetMethod(mre.MemberName);
                }
                else
                {
                    bool shouldTryAgain = false;;
                    try
                    {
                        methodInfo = typeToCallGetMethodOn.GetMethod(mre.MemberName, types);
                    }
                    catch
                    {
                        shouldTryAgain = true;
                    }
                    if (shouldTryAgain || methodInfo == null)
                    {
                        // The method doesn't exist, but it could be because
                        // the parser evaluated the types as one type (like int)
                        // but they are really of another type (like float).
                        var candidates = typeToCallGetMethodOn.GetMethods();
                        foreach (var candidate in candidates)
                        {
                            if (candidate.Name == mre.MemberName &&
                                candidate.GetParameters().Length == types.Length)
                            {
                                methodInfo = candidate;
                                break;
                            }
                        }
                    }
                }
            }
            else if (expression is InvocationExpression)
            {
                InvocationExpression ie = expression as InvocationExpression;

                if (container is Type)
                {
                    methodInfo = (container as Type).GetMethod(ie.Target.GetText(), types);
                }
                else
                {
                    methodInfo = container.GetType().GetMethod(ie.Target.GetText(), types);
                }
            }
            else
            {
                throw new NotImplementedException();
            }
        }
Exemplo n.º 6
0
 public static MemberReference MemberReference(NRefactory.MemberReferenceExpression memberReferenceExpression, IScope scope, INRefcatoryExpressionVisitor visitor)
 {
     return(new MemberReference(memberReferenceExpression, scope, visitor));
 }
        protected internal override bool DoMatch(AstNode other, PatternMatching.Match match)
        {
            MemberReferenceExpression o = other as MemberReferenceExpression;

            return(o != null && this.Target.DoMatch(o.Target, match) && MatchString(this.MemberName, o.MemberName) && this.TypeArguments.DoMatch(o.TypeArguments, match));
        }
Exemplo n.º 8
0
 public virtual S VisitMemberReferenceExpression(MemberReferenceExpression memberReferenceExpression, T data)
 {
     return(VisitChildren(memberReferenceExpression, data));
 }
 public virtual S VisitMemberReferenceExpression(MemberReferenceExpression memberReferenceExpression, T data)
 {
     throw new NotImplementedException();
 }
Exemplo n.º 10
0
 // Primary expressions
 public override object VisitMemberReferenceExpression(MemberReferenceExpression memberReferenceExpression, object data)
 {
     ParenthesizeIfRequired(memberReferenceExpression.Target, Primary);
     return(base.VisitMemberReferenceExpression(memberReferenceExpression, data));
 }
Exemplo n.º 11
0
 public override AstExpression VisitMemberReferenceExpression(NRefactory.MemberReferenceExpression memberReferenceExpression, IScope scope)
 {
     return(AstExpression.MemberReference(memberReferenceExpression, scope, this));
 }