protected virtual MethodDefinitionExpression CreateParseResultMethod() { var client = Expression.Parameter(FickleType.Define("PKWebServiceClient"), "client"); var data = Expression.Parameter(FickleType.Define("NSData"), "parseResult"); var contentType = Expression.Parameter(typeof(string), "withContentType"); var statusCode = Expression.Parameter(typeof(int), "andStatusCode"); var response = FickleExpression.Variable("id", "response"); var options = FickleExpression.Property(client, "NSDictionary", "options"); var parameters = new Expression[] { client, data, contentType, statusCode }; var bodyExpressions = new List <Expression>(); var delegateType = new FickleDelegateType(FickleType.Define("id"), new FickleParameterInfo(client.Type, "client"), new FickleParameterInfo(FickleType.Define("NSData"), "data")); var block = Expression.Variable(delegateType, "block"); bodyExpressions.Add(Expression.Assign(block, FickleExpression.Call(options, FickleType.Define("id"), "objectForKey", Expression.Constant("$ParseResultBlock")))); bodyExpressions.Add(Expression.Assign(response, FickleExpression.Call(block, "id", "Invoke", new { client, data })).ToStatement()); var setResponseStatus = Expression.IfThen ( Expression.Equal(FickleExpression.Call(response, "id", "responseStatus", null), Expression.Constant(null, FickleType.Define("id"))), FickleExpression.Call(response, "setResponseStatus", FickleExpression.New("ResponseStatus", "init", null)).ToStatementBlock() ); var populateResponseStatus = FickleExpression.Call(FickleExpression.Call(response, "id", "responseStatus", null), "setHttpStatus", statusCode); bodyExpressions.Add(setResponseStatus); bodyExpressions.Add(populateResponseStatus); bodyExpressions.Add(FickleExpression.Return(response)); var body = FickleExpression.Block ( new[] { response, block }, bodyExpressions.ToArray() ); return(new MethodDefinitionExpression ( "webServiceClient", parameters.ToReadOnlyCollection(), FickleType.Define("id"), body, false, null )); }
protected virtual MethodDefinitionExpression CreateParseResultMethod() { var client = Expression.Parameter(FickleType.Define("PKWebServiceClient"), "client"); var data = Expression.Parameter(FickleType.Define("NSData"), "parseResult"); var contentType = Expression.Parameter(typeof(string), "withContentType"); var statusCode = Expression.Parameter(typeof(int), "andStatusCode"); var response = FickleExpression.Variable(FickleType.Define("id"), "response"); var options = FickleExpression.Property(client, "NSDictionary", "options"); var parameters = new Expression[] { client, data, contentType, statusCode }; var bodyExpressions = new List<Expression>(); var delegateType = new FickleDelegateType(FickleType.Define("id"), new FickleParameterInfo(FickleType.Define("NSData"), "data")); var block = Expression.Variable(delegateType, "block"); bodyExpressions.Add(Expression.Assign(block, FickleExpression.Call(options, FickleType.Define("id"), "objectForKey", Expression.Constant("$ParseResultBlock")))); bodyExpressions.Add(Expression.Assign(response, FickleExpression.Call(block, "id", "Invoke", data)).ToStatement()); var setResponseStatus = Expression.IfThen ( Expression.Equal(FickleExpression.Call(response, "id", "responseStatus", null), Expression.Constant(null, FickleType.Define("id"))), FickleExpression.Call(response, "setResponseStatus", FickleExpression.New("ResponseStatus", "init", null)).ToStatement().ToBlock() ); var populateResponseStatus = FickleExpression.Call(FickleExpression.Call(response, "id", "responseStatus", null), "setHttpStatus", statusCode); bodyExpressions.Add(setResponseStatus); bodyExpressions.Add(populateResponseStatus); bodyExpressions.Add(FickleExpression.Return(response)); var body = FickleExpression.Block ( new[] { response, block }, bodyExpressions.ToArray() ); return new MethodDefinitionExpression ( "webServiceClient", new ReadOnlyCollection<Expression>(parameters), FickleType.Define("id"), body, false, null ); }