Update of /cvsroot/springnet/Spring.Net/src/Spring/Spring.Core/Core
In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv17775/src/Spring/Spring.Core/Core
Modified Files:
MethodParametersCountCriteria.cs MethodParametersCriteria.cs
Log Message:
MethodParametersCriteria and MethodParametersCountCriteria take into account 'params' parameter.
Index: MethodParametersCountCriteria.cs
===================================================================
RCS file: /cvsroot/springnet/Spring.Net/src/Spring/Spring.Core/Core/MethodParametersCountCriteria.cs,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** MethodParametersCountCriteria.cs 31 Jul 2007 02:03:36 -0000 1.1
--- MethodParametersCountCriteria.cs 20 Sep 2007 14:20:45 -0000 1.2
***************
*** 124,128 ****
if (method != null)
{
! satisfied = method.GetParameters().Length == ExpectedParameterCount;
}
return satisfied;
--- 124,137 ----
if (method != null)
{
! ParameterInfo[] parameters = method.GetParameters();
! if (parameters.Length == ExpectedParameterCount)
! {
! satisfied = true;
! }
! else if ((parameters.Length > 0) && (ExpectedParameterCount >= parameters.Length-1))
! {
! ParameterInfo lastParameter = parameters[parameters.Length - 1];
! satisfied = lastParameter.GetCustomAttributes(typeof(ParamArrayAttribute), false).Length > 0;
! }
}
return satisfied;
Index: MethodParametersCriteria.cs
===================================================================
RCS file: /cvsroot/springnet/Spring.Net/src/Spring/Spring.Core/Core/MethodParametersCriteria.cs,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** MethodParametersCriteria.cs 31 Jul 2007 02:03:36 -0000 1.1
--- MethodParametersCriteria.cs 20 Sep 2007 14:20:46 -0000 1.2
***************
*** 105,110 ****
if (method != null)
{
! Type[] parametersBeingChecked
! = ReflectionUtils.GetParameterTypes(method);
if (parametersBeingChecked != null
&& parametersBeingChecked.Length == _parameters.Length)
--- 105,120 ----
if (method != null)
{
! bool isParamArray = false;
! Type paramArrayType = null;
! ParameterInfo[] parametersBeingChecked = method.GetParameters();
! if (parametersBeingChecked.Length > 0)
! {
! ParameterInfo lastParameter = parametersBeingChecked[parametersBeingChecked.Length - 1];
! isParamArray = lastParameter.GetCustomAttributes(typeof(ParamArrayAttribute), false).Length > 0;
! if (isParamArray)
! {
! paramArrayType = lastParameter.ParameterType.GetElementType();
! }
! }
if (parametersBeingChecked != null
&& parametersBeingChecked.Length == _parameters.Length)
***************
*** 114,118 ****
{
Type sourceType = _parameters[i];
! Type typeBeingChecked = parametersBeingChecked[i];
if (!typeBeingChecked.IsAssignableFrom(sourceType))
{
--- 124,153 ----
{
Type sourceType = _parameters[i];
! Type typeBeingChecked = parametersBeingChecked[i].ParameterType;
! if (!typeBeingChecked.IsAssignableFrom(sourceType))
! {
! if (isParamArray && i == _parameters.Length - 1)
! {
! if (!paramArrayType.IsAssignableFrom(sourceType))
! {
! satisfied = false;
! break;
! }
! }
! else
! {
! satisfied = false;
! break;
! }
! }
! }
! }
! else if (isParamArray && (_parameters.Length >= parametersBeingChecked.Length - 1))
! {
! satisfied = true;
! for (int i = 0; i < parametersBeingChecked.Length - 1; ++i)
! {
! Type sourceType = _parameters[i];
! Type typeBeingChecked = parametersBeingChecked[i].ParameterType;
if (!typeBeingChecked.IsAssignableFrom(sourceType))
{
***************
*** 121,124 ****
--- 156,168 ----
}
}
+ for (int i = parametersBeingChecked.Length - 1; i < _parameters.Length; ++i)
+ {
+ Type sourceType = _parameters[i];
+ if (!paramArrayType.IsAssignableFrom(sourceType))
+ {
+ satisfied = false;
+ break;
+ }
+ }
}
}
|