public static ITranslation GetTranslation(DynamicTranslationArgs args, Match match) { var subject = args.Context.GetTranslationFor(args.FirstArgument); var memberName = match.Groups["MemberName"].Value; return(new MemberAccessTranslation(subject, memberName, args.ExpressionType, args.Context)); }
public static bool TryGetTranslation(DynamicTranslationArgs args, out ITranslation translation) { if (!args.IsMatch(_matcher, out var match)) { translation = null; return(false); } var subjectObject = args.FirstArgument; var subjectTranslation = args.Context.GetTranslationFor(subjectObject); var methodName = match.Groups["MethodName"].Value; var methodInfo = subjectObject.Type.GetPublicMethod(methodName); var methodArguments = args.Arguments.Skip(1).ToArray(); var method = GetMethod( methodName, methodInfo, methodArguments, args.ExpressionType); translation = MethodCallTranslation.ForDynamicMethodCall( subjectTranslation, method, methodArguments, args.Context); return(true); }
public static ITranslation For(DynamicExpression dynamicExpression, ITranslationContext context) { var args = new DynamicTranslationArgs(dynamicExpression, context); if (DynamicMemberAccessTranslation.TryGetTranslation(args, out var translation)) { return(translation); } if (DynamicMemberWriteTranslation.TryGetTranslation(args, out translation)) { return(translation); } if (DynamicMethodCallTranslation.TryGetTranslation(args, out translation)) { return(translation); } return(new FixedValueTranslation( ExpressionType.Dynamic, args.OperationDescription, dynamicExpression.Type, TokenType.Default, context)); }
public static bool TryGetTranslation(DynamicTranslationArgs args, out ITranslation translation) { if (!args.IsMatch(_matcher, out var match)) { translation = null; return(false); } translation = GetTranslation(args, match); return(true); }
public static bool TryGetTranslation(DynamicTranslationArgs args, out ITranslation translation) { if (!args.IsMatch(_matcher, out var match)) { translation = null; return(false); } var targetTranslation = DynamicMemberAccessTranslation.GetTranslation(args, match); translation = new AssignmentTranslation( ExpressionType.Assign, targetTranslation, args.LastArgument, args.Context); return(true); }