diff --git a/source/MetadataProcessor.Core/nanoAssemblyBuilder.cs b/source/MetadataProcessor.Core/nanoAssemblyBuilder.cs index 13a0d115..6a0ec42d 100644 --- a/source/MetadataProcessor.Core/nanoAssemblyBuilder.cs +++ b/source/MetadataProcessor.Core/nanoAssemblyBuilder.cs @@ -281,42 +281,47 @@ private HashSet BuildDependencyList(MetadataToken token) var mr = _tablesContext.MethodReferencesTable.Items.FirstOrDefault(i => i.MetadataToken == token); if (mr != null && - mr.DeclaringType != null) - { - set.Add(mr.DeclaringType.MetadataToken); - } - - if(mr != null && mr.ReturnType != null) { - if (mr.ReturnType.IsArray) + if (mr.MethodReturnType.ReturnType.IsValueType && + !mr.MethodReturnType.ReturnType.IsPrimitive) + { + set.Add(mr.MethodReturnType.ReturnType.MetadataToken); + } + else if (mr.ReturnType.IsArray) { if (mr.ReturnType.DeclaringType != null) { set.Add(mr.ReturnType.DeclaringType.MetadataToken); } } - else + else if (mr.ReturnType.FullName != "System.Void" && + mr.ReturnType.FullName != "System.String" && + !mr.MethodReturnType.ReturnType.IsPrimitive) { - if (mr.ReturnType.FullName != "System.Void" && - mr.ReturnType.FullName != "System.String") - { - set.Add(mr.ReturnType.MetadataToken); - } + set.Add(mr.ReturnType.MetadataToken); + } + else if(mr.DeclaringType != null) + { + set.Add(mr.DeclaringType.MetadataToken); } } // parameters foreach (var p in mr.Parameters) { - if (p.ParameterType.IsValueType && - !p.ParameterType.IsPrimitive) + if (p.ParameterType.DeclaringType != null) + { + set.Add(p.ParameterType.DeclaringType.MetadataToken); + } + else if (p.ParameterType.MetadataType == MetadataType.Class) { set.Add(p.ParameterType.MetadataToken); } - else if (p.ParameterType.DeclaringType != null) + else if (p.ParameterType.IsValueType && + !p.ParameterType.IsPrimitive) { - set.Add(p.ParameterType.DeclaringType.MetadataToken); + set.Add(p.ParameterType.MetadataToken); } } @@ -392,7 +397,13 @@ private HashSet BuildDependencyList(MetadataToken token) { set.Add(fd.MetadataToken); } - else if (fd.FieldType.IsValueType) + else if (fd.FieldType.IsValueType && + !fd.FieldType.IsPrimitive) + { + set.Add(fd.FieldType.MetadataToken); + } + else if (!fd.FieldType.IsValueType && + !fd.FieldType.IsPrimitive) { set.Add(fd.FieldType.MetadataToken); } @@ -427,6 +438,15 @@ private HashSet BuildDependencyList(MetadataToken token) { set.Add(p.ParameterType.DeclaringType.MetadataToken); } + else if (p.ParameterType.MetadataType == MetadataType.Class) + { + set.Add(p.ParameterType.MetadataToken); + } + else if (p.ParameterType.IsValueType && + !p.ParameterType.IsPrimitive) + { + set.Add(p.ParameterType.MetadataToken); + } } if (md.HasBody) @@ -442,6 +462,11 @@ private HashSet BuildDependencyList(MetadataToken token) { set.Add(v.VariableType.MetadataToken); } + else if (v.VariableType.IsValueType && + !v.VariableType.IsPrimitive) + { + set.Add(v.VariableType.MetadataToken); + } } // op codes