Fix NET35 build
NET35 doesn't seem to support Expression.Variable.
Added back previous DelegateProxyFactory implementation from
ac140ef7ba
for NET35 target only.
Updated test accordingingly.
This commit is contained in:
Родитель
1e9e8a31d7
Коммит
6f82b2f2a4
|
@ -15,7 +15,11 @@ namespace NSubstitute.Acceptance.Specs.FieldReports
|
||||||
|
|
||||||
foo(out bar);
|
foo(out bar);
|
||||||
|
|
||||||
|
#if NET4 || NET45
|
||||||
Assert.AreEqual(42, bar);
|
Assert.AreEqual(42, bar);
|
||||||
|
#else
|
||||||
|
Assert.Ignore("Not supported for NET35");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -41,6 +41,28 @@ namespace NSubstitute.Proxies.DelegateProxy
|
||||||
ParameterExpression[] proxyParameters = delegateMethodToProxy.GetParameters().Select(x => Expression.Parameter(x.ParameterType, x.Name)).ToArray();
|
ParameterExpression[] proxyParameters = delegateMethodToProxy.GetParameters().Select(x => Expression.Parameter(x.ParameterType, x.Name)).ToArray();
|
||||||
Expression[] proxyParametersAsObjects = proxyParameters.Select(x => (Expression)Expression.Convert(x, typeof(object))).ToArray();
|
Expression[] proxyParametersAsObjects = proxyParameters.Select(x => (Expression)Expression.Convert(x, typeof(object))).ToArray();
|
||||||
|
|
||||||
|
#if NET35
|
||||||
|
Expression callInvokeOnDelegateCallInstance =
|
||||||
|
Expression.Call(
|
||||||
|
Expression.Constant(delegateCall),
|
||||||
|
invokeOnDelegateCall,
|
||||||
|
new Expression[]
|
||||||
|
{
|
||||||
|
Expression.NewArrayInit(typeof(object), proxyParametersAsObjects)
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
if (delegateMethodToProxy.ReturnType != typeof(void))
|
||||||
|
{
|
||||||
|
callInvokeOnDelegateCallInstance =
|
||||||
|
Expression.Convert(callInvokeOnDelegateCallInstance, delegateMethodToProxy.ReturnType);
|
||||||
|
}
|
||||||
|
|
||||||
|
var proxyExpression = Expression.Lambda(delegateType, callInvokeOnDelegateCallInstance, proxyParameters);
|
||||||
|
return proxyExpression.Compile();
|
||||||
|
#endif
|
||||||
|
#if !NET35
|
||||||
|
|
||||||
var bodyExpressions = new List<Expression>();
|
var bodyExpressions = new List<Expression>();
|
||||||
bool isVoid = delegateMethodToProxy.ReturnType == typeof(void);
|
bool isVoid = delegateMethodToProxy.ReturnType == typeof(void);
|
||||||
var arguments = Expression.Variable(typeof(object[]), "arguments");
|
var arguments = Expression.Variable(typeof(object[]), "arguments");
|
||||||
|
@ -71,6 +93,7 @@ namespace NSubstitute.Proxies.DelegateProxy
|
||||||
var variables = isVoid ? new[] { arguments } : new[] { arguments, result };
|
var variables = isVoid ? new[] { arguments } : new[] { arguments, result };
|
||||||
var proxyExpression = Expression.Lambda(delegateType, Expression.Block(variables, bodyExpressions), proxyParameters);
|
var proxyExpression = Expression.Lambda(delegateType, Expression.Block(variables, bodyExpressions), proxyParameters);
|
||||||
return proxyExpression.Compile();
|
return proxyExpression.Compile();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Загрузка…
Ссылка в новой задаче