@@ -281,42 +281,47 @@ private HashSet<MetadataToken> BuildDependencyList(MetadataToken token)
281281 var mr = _tablesContext . MethodReferencesTable . Items . FirstOrDefault ( i => i . MetadataToken == token ) ;
282282
283283 if ( mr != null &&
284- mr . DeclaringType != null )
285- {
286- set . Add ( mr . DeclaringType . MetadataToken ) ;
287- }
288-
289- if ( mr != null &&
290284 mr . ReturnType != null )
291285 {
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 )
293292 {
294293 if ( mr . ReturnType . DeclaringType != null )
295294 {
296295 set . Add ( mr . ReturnType . DeclaringType . MetadataToken ) ;
297296 }
298297 }
299- else
298+ else if ( mr . ReturnType . FullName != "System.Void" &&
299+ mr . ReturnType . FullName != "System.String" &&
300+ ! mr . MethodReturnType . ReturnType . IsPrimitive )
300301 {
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 ) ;
306307 }
307308 }
308309
309310 // parameters
310311 foreach ( var p in mr . Parameters )
311312 {
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 )
314318 {
315319 set . Add ( p . ParameterType . MetadataToken ) ;
316320 }
317- else if ( p . ParameterType . DeclaringType != null )
321+ else if ( p . ParameterType . IsValueType &&
322+ ! p . ParameterType . IsPrimitive )
318323 {
319- set . Add ( p . ParameterType . DeclaringType . MetadataToken ) ;
324+ set . Add ( p . ParameterType . MetadataToken ) ;
320325 }
321326 }
322327
@@ -392,7 +397,13 @@ private HashSet<MetadataToken> BuildDependencyList(MetadataToken token)
392397 {
393398 set . Add ( fd . MetadataToken ) ;
394399 }
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 )
396407 {
397408 set . Add ( fd . FieldType . MetadataToken ) ;
398409 }
@@ -427,6 +438,15 @@ private HashSet<MetadataToken> BuildDependencyList(MetadataToken token)
427438 {
428439 set . Add ( p . ParameterType . DeclaringType . MetadataToken ) ;
429440 }
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+ }
430450 }
431451
432452 if ( md . HasBody )
@@ -442,6 +462,11 @@ private HashSet<MetadataToken> BuildDependencyList(MetadataToken token)
442462 {
443463 set . Add ( v . VariableType . MetadataToken ) ;
444464 }
465+ else if ( v . VariableType . IsValueType &&
466+ ! v . VariableType . IsPrimitive )
467+ {
468+ set . Add ( v . VariableType . MetadataToken ) ;
469+ }
445470 }
446471
447472 // op codes
0 commit comments