Support GenericInstance types in inline method signatures #565
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Currently, Harmony can't patch nor
MethodCopier.GetInstructions
of methods withcalli
instructions containing generic instances in their signature such as in this example:Patching or calling
GetInstructions
on such methods results in:This is a rare but legitimate case that's come up in something I'm working on. Note that this isn't about open generics (like
List<T>
, which Harmony doesn't really support) but closed ones (e.g.List<int>
).The pull request fixes this issue by adding support for type signature elements of kind
GenericInstance
in the inline signature parser. The patch is directly based on Mono.Cecil's implementation: https://github.com/jbevain/cecil/blob/96026325ee1cb6627a3e4a32b924ab2905f02553/Mono.Cecil/AssemblyReader.cs#L3424This change purely expands the set of patchable methods so poses no backwards compatibility concerns.