Fabric-ASM
Fabric-ASM copied to clipboard
Java 17's sealed enums
The enum extender does not permit the new anonymous classes when the enum has been compiled with java 17. (All pre-existing classes are permited). I have seen a few people falling for this.
See: https://github.com/LordDeatHunter/HarvestScythes/issues/23
Example bytecode:
// class version 61.0 (61)
// access flags 0x4421
// signature Ljava/lang/Enum<Lnet/minecraft/enchantment/EnchantmentTarget;>;
// declaration: net/minecraft/enchantment/EnchantmentTarget extends java.lang.Enum<net.minecraft.enchantment.EnchantmentTarget>
public abstract enum net/minecraft/enchantment/EnchantmentTarget extends java/lang/Enum {
// compiled from: EnchantmentTarget.java
NESTMEMBER net/minecraft/enchantment/EnchantmentTarget$6
NESTMEMBER net/minecraft/enchantment/EnchantmentTarget$5
NESTMEMBER net/minecraft/enchantment/EnchantmentTarget$4
NESTMEMBER net/minecraft/enchantment/EnchantmentTarget$3
NESTMEMBER net/minecraft/enchantment/EnchantmentTarget$2
NESTMEMBER net/minecraft/enchantment/EnchantmentTarget$14
NESTMEMBER net/minecraft/enchantment/EnchantmentTarget$13
NESTMEMBER net/minecraft/enchantment/EnchantmentTarget$12
NESTMEMBER net/minecraft/enchantment/EnchantmentTarget$11
NESTMEMBER net/minecraft/enchantment/EnchantmentTarget$10
NESTMEMBER net/minecraft/enchantment/EnchantmentTarget$9
NESTMEMBER net/minecraft/enchantment/EnchantmentTarget$8
NESTMEMBER net/minecraft/enchantment/EnchantmentTarget$7
NESTMEMBER net/minecraft/enchantment/EnchantmentTarget$1
PERMITTEDSUBCLASS net/minecraft/enchantment/EnchantmentTarget$1
PERMITTEDSUBCLASS net/minecraft/enchantment/EnchantmentTarget$7
PERMITTEDSUBCLASS net/minecraft/enchantment/EnchantmentTarget$8
PERMITTEDSUBCLASS net/minecraft/enchantment/EnchantmentTarget$9
PERMITTEDSUBCLASS net/minecraft/enchantment/EnchantmentTarget$10
PERMITTEDSUBCLASS net/minecraft/enchantment/EnchantmentTarget$11
PERMITTEDSUBCLASS net/minecraft/enchantment/EnchantmentTarget$12
PERMITTEDSUBCLASS net/minecraft/enchantment/EnchantmentTarget$13
PERMITTEDSUBCLASS net/minecraft/enchantment/EnchantmentTarget$14
PERMITTEDSUBCLASS net/minecraft/enchantment/EnchantmentTarget$2
PERMITTEDSUBCLASS net/minecraft/enchantment/EnchantmentTarget$3
PERMITTEDSUBCLASS net/minecraft/enchantment/EnchantmentTarget$4
PERMITTEDSUBCLASS net/minecraft/enchantment/EnchantmentTarget$5
PERMITTEDSUBCLASS net/minecraft/enchantment/EnchantmentTarget$6
// access flags 0x4010
final enum INNERCLASS net/minecraft/enchantment/EnchantmentTarget$1 null null
// access flags 0x4010
final enum INNERCLASS net/minecraft/enchantment/EnchantmentTarget$7 null null
// access flags 0x4010
final
Merging #23 will resolve this issue, but in the mean time this can be worked around using an access widener to make the enum extendable. You won't see any changes in the source, but it will remove the sealed modifier in the bytecode.
Taken from MattiDragon in a chat on Fabricord, and seemingly also discovered in BelgianSalamander/MoreBundles#12