@Nullable
	public static Type fromArrayOpcode(int opcode) {
		return switch (opcode) {
			case Opcodes.ARRAYLENGTH, Opcodes.BALOAD, Opcodes.CALOAD, Opcodes.SALOAD, Opcodes.IALOAD,
					Opcodes.BASTORE, Opcodes.CASTORE, Opcodes.SASTORE, Opcodes.IASTORE -> Type.INT_TYPE;
			case Opcodes.AALOAD, Opcodes.AASTORE -> Types.OBJECT_TYPE;
			case Opcodes.FALOAD, Opcodes.FASTORE -> Type.FLOAT_TYPE;
			case Opcodes.DALOAD, Opcodes.DASTORE -> Type.DOUBLE_TYPE;
			case Opcodes.LALOAD, Opcodes.LASTORE -> Type.LONG_TYPE;
			default -> null;
		};
	}
@Test
	void testFromArrayOpcode() {
		int[] ints = {Opcodes.ARRAYLENGTH, Opcodes.BALOAD, Opcodes.CALOAD, Opcodes.SALOAD, Opcodes.IALOAD,
				Opcodes.BASTORE, Opcodes.CASTORE, Opcodes.SASTORE, Opcodes.IASTORE};
		int[] floats = {Opcodes.FALOAD, Opcodes.FASTORE};
		int[] doubles = {Opcodes.DALOAD, Opcodes.DASTORE};
		int[] longs = {Opcodes.LALOAD, Opcodes.LASTORE};
		int[] objects = {Opcodes.AALOAD, Opcodes.AASTORE};
		for (int v : ints) assertSame(Type.INT_TYPE, Types.fromArrayOpcode(v));
		for (int v : floats) assertSame(Type.FLOAT_TYPE, Types.fromArrayOpcode(v));
		for (int v : doubles) assertSame(Type.DOUBLE_TYPE, Types.fromArrayOpcode(v));
		for (int v : longs) assertSame(Type.LONG_TYPE, Types.fromArrayOpcode(v));
		for (int v : objects) assertSame(Types.OBJECT_TYPE, Types.fromArrayOpcode(v));
		assertNull(Types.fromArrayOpcode(-1));
	}