package me.august.lumen.common; import java.util.ArrayList; import java.util.List; public enum Modifier { PACKAGE_PRIVATE(0x0000), PUBLIC(0x0001), PRIVATE(0x0002), PROTECTED(0x004), FINAL(0x0010), STATIC(0x0008), INTERFACE(0x0200), ABSTRACT(0x0400), VOLATILE(0x0040), SYNCHRONIZED(0x0020), NATIVE(0x0100); public final int value; Modifier(int value) { this.value = value; } public int getValue() { return value; } public static int compose(Modifier... mods) { int res = 0; for (Modifier m : mods) { res |= m.value; } return res; } public static Modifier[] fromAccess(int access) { List<Modifier> modifiers = new ArrayList<>(); for (Modifier mod : values()) { if ((access & mod.getValue()) == mod.getValue()) { modifiers.add(mod); } } if ((access & PRIVATE.value) != 0 || (access & PROTECTED.value) != 0 || (access & PUBLIC.value) != 0) modifiers.remove(PACKAGE_PRIVATE); return modifiers.toArray(new Modifier[modifiers.size()]); } }