protected override Expression VisitMethodCall(MethodCallExpression node) { if (typeof(IModelElement).IsAssignableFrom(node.Type) && node.Arguments.Any(arg => !typeof(IModelElement).IsAssignableFrom(arg.Type))) { var replaceMemberId = node.ToString(); ParameterExtraction extraction; if (!parameters.TryGetValue(replaceMemberId, out extraction)) { extraction = new ParameterExtraction(Expression.Parameter(node.Type, "model_par_" + parameters.Count.ToString()), node); parameters.Add(replaceMemberId, extraction); } return(extraction.Parameter); } return(base.VisitMethodCall(node)); }
protected override Expression VisitMember(MemberExpression node) { if (typeof(IModelElement).IsAssignableFrom(node.Type) && !typeof(IModelElement).IsAssignableFrom(node.Expression.Type)) { var parameterCollector = new ParameterCollector(); parameterCollector.Visit(node); parameterCollector.Parameters.IntersectWith(lambdaParameters); if (parameterCollector.Parameters.Count > 0) { return(node); } var replaceMemberId = node.ToString(); ParameterExtraction extraction; if (!parameters.TryGetValue(replaceMemberId, out extraction)) { extraction = new ParameterExtraction(Expression.Parameter(node.Type, "model_par_" + parameters.Count.ToString()), node); parameters.Add(replaceMemberId, extraction); } return(extraction.Parameter); } return(base.VisitMember(node)); }