Skip to content

Java 17's sealed enums #11

@modmuss50

Description

@modmuss50

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: LordDeatHunter/HarvestScythes#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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions