I made a few more improvements to improve the output:
All primitive types are correctly resolved now.
Concrete generics are handled properly so that they no longer show up as unknown methods.
Lists of concrete generics are consolidated into their common base type.
PE exports no longer get counted as unknown calls.
Possible improvements for the future:
The Type field of CallsAttribute and CalledByAttribute sometimes attempts to reference an inaccessible type such as System.ThrowHelper or a type from an unreferenced module. Adding a string TypeName field might be desirable to handle these edge cases.
The Member field of CallsAttribute and CalledByAttribute currently just contains the member's name. A full signature might be better for removing ambiguity.
Generic types in the Type field currently don't have type parameters. It may be desirable to retain that information and use it to fill those parameters where feasible.
I implemented a system for verifying that a type is accessible. In the event it isn't, TypeFullName is used instead. I do not plan on implementing any of the other potential improvements in this pull request.
I made a few more improvements to improve the output:
Possible improvements for the future:
Type
field ofCallsAttribute
andCalledByAttribute
sometimes attempts to reference an inaccessible type such asSystem.ThrowHelper
or a type from an unreferenced module. Adding a stringTypeName
field might be desirable to handle these edge cases.Member
field ofCallsAttribute
andCalledByAttribute
currently just contains the member's name. A full signature might be better for removing ambiguity.Type
field currently don't have type parameters. It may be desirable to retain that information and use it to fill those parameters where feasible.