@@ -61,9 +61,19 @@ private static IEnumerable<StepArgument> ExtractArguments<T>(Expression expressi
6161 if ( unaryExpression != null )
6262 return ExtractArguments ( unaryExpression , value ) ;
6363
64+ var methodCallExpression = expression as MethodCallExpression ;
65+ if ( methodCallExpression != null )
66+ return Invoke ( methodCallExpression , ExtractArguments ( methodCallExpression , value ) ) ;
67+
6468 return new StepArgument [ 0 ] ;
6569 }
6670
71+ private static IEnumerable < StepArgument > Invoke ( MethodCallExpression methodCallExpression , IEnumerable < StepArgument > args )
72+ {
73+ var value = ( ( ConstantExpression ) methodCallExpression . Object ) . Value ;
74+ return new [ ] { new StepArgument ( ( ) => methodCallExpression . Method . Invoke ( value , args . Select ( s => s . Value ) . ToArray ( ) ) ) } ;
75+ }
76+
6777 private static IEnumerable < StepArgument > ExtractArguments < T > ( MethodCallExpression methodCallExpression , T value )
6878 {
6979 var constants = new List < StepArgument > ( ) ;
@@ -90,7 +100,7 @@ private static IEnumerable<StepArgument> ExtractArguments<T>(NewExpression newEx
90100 arguments . AddRange ( ExtractArguments ( argumentExpression , value ) ) ;
91101 }
92102
93- return new [ ] { new StepArgument ( newExpression . Constructor . Invoke ( arguments . Select ( o => o . Value ) . ToArray ( ) ) ) } ;
103+ return new [ ] { new StepArgument ( ( ) => newExpression . Constructor . Invoke ( arguments . Select ( o => o . Value ) . ToArray ( ) ) ) } ;
94104 }
95105
96106 private static IEnumerable < StepArgument > ExtractArguments < T > ( NewArrayExpression newArrayExpression , T value )
@@ -124,7 +134,7 @@ private static IEnumerable<StepArgument> ExtractNonConvertibleArrayConstants<T>(
124134 arrayElements . Add ( arrayElement ) ;
125135 }
126136
127- return ToArray ( arrayElements ) . Select ( o => new StepArgument ( o ) ) ;
137+ return ToArray ( arrayElements ) . Select ( o => new StepArgument ( ( ) => o ) ) ;
128138 }
129139
130140 private static IEnumerable < object > ToArray ( IList list )
@@ -147,7 +157,7 @@ private static IEnumerable<StepArgument> ExtractConvertibleTypeArrayConstants(Ne
147157 arrayElements . Add ( Convert . ChangeType ( arrayElement , arrayElementExpression . Type , null ) ) ;
148158 }
149159
150- return new [ ] { new StepArgument ( ToArray ( arrayElements ) ) } ;
160+ return new [ ] { new StepArgument ( ( ) => ToArray ( arrayElements ) ) } ;
151161 }
152162
153163 private static IEnumerable < StepArgument > ExtractArguments < T > ( ConstantExpression constantExpression , T value )
@@ -164,7 +174,7 @@ private static IEnumerable<StepArgument> ExtractArguments<T>(ConstantExpression
164174 constantExpression . Type . IsPrimitive ||
165175 constantExpression . Type . IsEnum ||
166176 constantExpression . Value == null )
167- constants . Add ( new StepArgument ( constantExpression . Value ) ) ;
177+ constants . Add ( new StepArgument ( ( ) => constantExpression . Value ) ) ;
168178
169179 return constants ;
170180 }
@@ -220,14 +230,7 @@ private static StepArgument ExtractPropertyValue<T>(MemberExpression expression,
220230 if ( memberExpression != null )
221231 {
222232 var extractArguments = ExtractArgument ( memberExpression , value ) . Value ;
223- try
224- {
225- return new StepArgument ( member , extractArguments ) ;
226- }
227- catch ( TargetException )
228- {
229- return new StepArgument ( null ) ;
230- }
233+ return new StepArgument ( member , extractArguments ) ;
231234 }
232235 return new StepArgument ( member , value ) ;
233236 }
0 commit comments