Class#getDeclaredField not remappable with Proguard mappings
Jikoo opened this issue · comments
Class#getDeclaredField
is supposed to be remappable. It turns out that that doesn't work using SpecialSource or SpecialSourceMP because the remapping needs to be done by a preprocessor so that the owning class name is still the old class name.
SS via command line and SSMP both only support post-processors (and require an access transformer file to enable that, though that's fine because supplying an empty file works). I started working on a change to add a parameter for preprocessing only to find out that SS is also incapable of correctly matching fields from Mojang's Proguard mappings.
RemapperProcessor#remapGetDeclaredField
calls JarMapping#tryClimb
with a null descriptor. JarMapping#tryClimb
assembles that info into a key used in Map#get
. For the other mapping types, this is fine, but for Proguard mappings the key includes the descriptor. We don't know what the actual type is from the bytecode because it's being accessed via reflection, so we can never create a valid key.