MappingsJoiner
public MappingsJoiner(net.fabricmc.mapping.tree.TinyTree sourceMappings,
net.fabricmc.mapping.tree.TinyTree targetMappings,
java.lang.String fromNamespace,
java.lang.String toNamespace)
Say A is the source mappings and B is the target mappings.
It does not map from intermediary to named but rather maps from named-A to named-B, by matching intermediary names.
It goes through all of the intermediary names of A, and for every such intermediary name, call it I,
matches the named mapping of I in A, with the named mapping of I in B.
As you might imagine, this requires intermediary mappings to be stable across all versions.
Since we only use intermediary names (and not descriptors) to match, and intermediary names are unique,
this will migrate methods that have had their signature changed too.