@@ -281,42 +281,47 @@ private HashSet<MetadataToken> BuildDependencyList(MetadataToken token)
281
281
var mr = _tablesContext . MethodReferencesTable . Items . FirstOrDefault ( i => i . MetadataToken == token ) ;
282
282
283
283
if ( mr != null &&
284
- mr . DeclaringType != null )
285
- {
286
- set . Add ( mr . DeclaringType . MetadataToken ) ;
287
- }
288
-
289
- if ( mr != null &&
290
284
mr . ReturnType != null )
291
285
{
292
- if ( mr . ReturnType . IsArray )
286
+ if ( mr . MethodReturnType . ReturnType . IsValueType &&
287
+ ! mr . MethodReturnType . ReturnType . IsPrimitive )
288
+ {
289
+ set . Add ( mr . MethodReturnType . ReturnType . MetadataToken ) ;
290
+ }
291
+ else if ( mr . ReturnType . IsArray )
293
292
{
294
293
if ( mr . ReturnType . DeclaringType != null )
295
294
{
296
295
set . Add ( mr . ReturnType . DeclaringType . MetadataToken ) ;
297
296
}
298
297
}
299
- else
298
+ else if ( mr . ReturnType . FullName != "System.Void" &&
299
+ mr . ReturnType . FullName != "System.String" &&
300
+ ! mr . MethodReturnType . ReturnType . IsPrimitive )
300
301
{
301
- if ( mr . ReturnType . FullName != "System.Void" &&
302
- mr . ReturnType . FullName != "System.String" )
303
- {
304
- set . Add ( mr . ReturnType . MetadataToken ) ;
305
- }
302
+ set . Add ( mr . ReturnType . MetadataToken ) ;
303
+ }
304
+ else if ( mr . DeclaringType != null )
305
+ {
306
+ set . Add ( mr . DeclaringType . MetadataToken ) ;
306
307
}
307
308
}
308
309
309
310
// parameters
310
311
foreach ( var p in mr . Parameters )
311
312
{
312
- if ( p . ParameterType . IsValueType &&
313
- ! p . ParameterType . IsPrimitive )
313
+ if ( p . ParameterType . DeclaringType != null )
314
+ {
315
+ set . Add ( p . ParameterType . DeclaringType . MetadataToken ) ;
316
+ }
317
+ else if ( p . ParameterType . MetadataType == MetadataType . Class )
314
318
{
315
319
set . Add ( p . ParameterType . MetadataToken ) ;
316
320
}
317
- else if ( p . ParameterType . DeclaringType != null )
321
+ else if ( p . ParameterType . IsValueType &&
322
+ ! p . ParameterType . IsPrimitive )
318
323
{
319
- set . Add ( p . ParameterType . DeclaringType . MetadataToken ) ;
324
+ set . Add ( p . ParameterType . MetadataToken ) ;
320
325
}
321
326
}
322
327
@@ -392,7 +397,13 @@ private HashSet<MetadataToken> BuildDependencyList(MetadataToken token)
392
397
{
393
398
set . Add ( fd . MetadataToken ) ;
394
399
}
395
- else if ( fd . FieldType . IsValueType )
400
+ else if ( fd . FieldType . IsValueType &&
401
+ ! fd . FieldType . IsPrimitive )
402
+ {
403
+ set . Add ( fd . FieldType . MetadataToken ) ;
404
+ }
405
+ else if ( ! fd . FieldType . IsValueType &&
406
+ ! fd . FieldType . IsPrimitive )
396
407
{
397
408
set . Add ( fd . FieldType . MetadataToken ) ;
398
409
}
@@ -427,6 +438,15 @@ private HashSet<MetadataToken> BuildDependencyList(MetadataToken token)
427
438
{
428
439
set . Add ( p . ParameterType . DeclaringType . MetadataToken ) ;
429
440
}
441
+ else if ( p . ParameterType . MetadataType == MetadataType . Class )
442
+ {
443
+ set . Add ( p . ParameterType . MetadataToken ) ;
444
+ }
445
+ else if ( p . ParameterType . IsValueType &&
446
+ ! p . ParameterType . IsPrimitive )
447
+ {
448
+ set . Add ( p . ParameterType . MetadataToken ) ;
449
+ }
430
450
}
431
451
432
452
if ( md . HasBody )
@@ -442,6 +462,11 @@ private HashSet<MetadataToken> BuildDependencyList(MetadataToken token)
442
462
{
443
463
set . Add ( v . VariableType . MetadataToken ) ;
444
464
}
465
+ else if ( v . VariableType . IsValueType &&
466
+ ! v . VariableType . IsPrimitive )
467
+ {
468
+ set . Add ( v . VariableType . MetadataToken ) ;
469
+ }
445
470
}
446
471
447
472
// op codes
0 commit comments