public MemberReference(NRefactory.MemberReferenceExpression memberReference, IScope scope, INRefcatoryExpressionVisitor visitor) : base(scope, visitor) { _memberReferenceExpression = memberReference; ResolveMember(); BuildExpression(); }
public override void VisitMemberReferenceExpression(ICSharpCode.NRefactory.CSharp.MemberReferenceExpression memberReferenceExpression) { OnVisitMemberReference(memberReferenceExpression); foreach (var astNode in memberReferenceExpression.Children) { astNode.AcceptVisitor(this); } }
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); }
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(); } }
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)); }
public virtual S VisitMemberReferenceExpression(MemberReferenceExpression memberReferenceExpression, T data) { return(VisitChildren(memberReferenceExpression, data)); }
public virtual S VisitMemberReferenceExpression(MemberReferenceExpression memberReferenceExpression, T data) { throw new NotImplementedException(); }
// Primary expressions public override object VisitMemberReferenceExpression(MemberReferenceExpression memberReferenceExpression, object data) { ParenthesizeIfRequired(memberReferenceExpression.Target, Primary); return(base.VisitMemberReferenceExpression(memberReferenceExpression, data)); }
public override AstExpression VisitMemberReferenceExpression(NRefactory.MemberReferenceExpression memberReferenceExpression, IScope scope) { return(AstExpression.MemberReference(memberReferenceExpression, scope, this)); }