Annotation Interface Pseudo
The superclass requirement for pseudo mixins is extremely important if the target has an obfuscated class in its hierarchy. For example let's assume that we're mixing into a class CustomGuiScreen from another party which extends GuiScreen, where GuiScreen is an obfuscated class. GuiScreen contains an obfuscated method initGui which the (@Pseudo) target class overrides. Attempting to inject into initGui would succeed at dev time but would fail at production time, because the reference is obfuscated. Normally when a target overrides an obfuscated method in this way, the AP can resolve the obfuscation by walking the superclass hierarchy of the target in order to discover a mapping. However when the target is not available at compile time the AP cannot do this and must rely on only information from the mixin itself. We can overcome this problem by ensuring the mixin inherits from the same superclass (or at least a superclass which contains the obfuscated methods or fields used in the mixin), thus allowing our example initGui method to be resolved in the superclass hierarchy. This behaviour is not available to normal mixins as the AP always resolves the hierarchy via the target class metadata when it is available.
If the target class contains obfuscated methods which the mixin needs to
Overwrite or Shadow which are not inherited from a
superclass (eg. the target is obfuscated), the Overwrite or
Shadow must be decorated manually with aliases since
there is no mechanism for the AP to resolve the mappings automatically.