@@ -104,15 +104,33 @@ public bool TryCallMethod(long objectId, string name, object[] parameters, out o
104104
105105 try
106106 {
107- // Do we have enough arguments? Add Type.Missing for any that we don't have incase of optional params
107+ //Fix for C# paramArray and refactor on arguments mismatch 03/22/2016
108108 var missingParams = method . ParameterCount - parameters . Length ;
109- if ( missingParams > 0 )
109+ if ( missingParams > 0 || method . MethodParameters . Any ( t => t . IsParamArray ) )
110110 {
111- var paramList = new List < object > ( parameters ) ;
111+ var paramList = new List < object > ( ) ;
112112
113- for ( var i = 0 ; i < missingParams ; i ++ )
113+ for ( int i = 0 ; i < method . MethodParameters . Count ; i ++ )
114114 {
115- paramList . Add ( Type . Missing ) ;
115+ object jsParam = parameters . ElementAtOrDefault ( i ) ;
116+ if ( jsParam == null && ! method . MethodParameters [ i ] . IsParamArray )
117+ {
118+ paramList . Add ( Type . Missing ) ;
119+ }
120+ else if ( method . MethodParameters [ i ] . IsParamArray )
121+ {
122+ List < object > convertedParams = new List < object > ( ) ;
123+ for ( int s = i ; s < parameters . Count ( ) ; s ++ )
124+ {
125+ convertedParams . Add ( parameters [ s ] ) ;
126+ }
127+ paramList . Add ( convertedParams . ToArray ( ) ) ;
128+ break ;
129+ }
130+ else
131+ {
132+ paramList . Add ( jsParam ) ;
133+ }
116134 }
117135
118136 parameters = paramList . ToArray ( ) ;
@@ -287,6 +305,14 @@ private static JavascriptMethod CreateJavaScriptMethod(MethodInfo methodInfo, bo
287305 jsMethod . JavascriptName = GetJavascriptName ( methodInfo . Name , camelCaseJavascriptNames ) ;
288306 jsMethod . Function = methodInfo . Invoke ;
289307 jsMethod . ParameterCount = methodInfo . GetParameters ( ) . Length ;
308+ jsMethod . MethodParameters = methodInfo . GetParameters ( )
309+ . Select ( t => new MethodParameter ( )
310+ { Name = t . Name ,
311+ ParameterType = t . ParameterType ,
312+ Position = t . Position ,
313+ IsParamArray = t . GetCustomAttributes ( typeof ( ParamArrayAttribute ) , false ) . Length > 0
314+ } ) . ToList ( ) ;
315+
290316
291317 return jsMethod ;
292318 }
0 commit comments