FlatRemapper
Immutable mapping tables + a lazily-built immutable MC hierarchy; each eval is a plain ASM ClassRemapper. Member lookups climb owner→ancestors (super first, then interfaces); a game owner's answer is memoized, a module's own is not (ModuleRemapper). All state is immutable or a ConcurrentHashMap memo, so many lanes may remap concurrently.
Constructors
Types
Rewrites the @Metadata proto alongside the bytecode. Sits ABOVE the ClassRemapper, so the proto handed down is already in the runtime namespace: ASM remaps an annotation's Type values and nothing else, and d1/d2 are plain strings it would pass straight through — which is what left kotlin-reflect resolving mojmap classifiers no non-mojmap runtime has, degrading to ??? or throwing with the name nowhere in the message. remapper is the bytecode's, the only one that knows this module's classes.
One module's remap. ASM hands a callback nothing but owner, name and descriptor, so the module's own classes (own, each to its direct supertypes) ride on the remapper. A member they own is resolved every time, never memoized: its key spells this eval's names, which no later eval asks for — and one reusing a name would get this module's answer.
Properties
Functions
cr's direct supertypes, super first then interfaces; a null super is java/lang/Object.
The rewritten @Metadata fields, or null to re-emit the original verbatim.