@SuppressWarnings("unchecked")
	private static Class<? extends Disassembler> getLanguageSpecificDisassembler(Language parser) {
		String className = parser.getProperty(GhidraLanguagePropertyKeys.CUSTOM_DISASSEMBLER_CLASS);
		if (className == null) {
			return null;
		}
		try {
			Class<?> disassemblerClass = Class.forName(className);
			if (!Disassembler.class.isAssignableFrom(disassemblerClass)) {
				Msg.error(Disassembler.class,
					"Invalid Class specified for " +
						GhidraLanguagePropertyKeys.CUSTOM_DISASSEMBLER_CLASS + " (" +
						disassemblerClass.getName() + "): " +
						parser.getLanguageDescription().getLanguageID());
				return null;
			}
			return (Class<? extends Disassembler>) disassemblerClass;
		}
		catch (ClassNotFoundException e) {
			throw new RuntimeException("Invalid Class specified for " +
				GhidraLanguagePropertyKeys.CUSTOM_DISASSEMBLER_CLASS + " (" + className + "): " +
				parser.getLanguageDescription().getLanguageID(), e);
		}
	}
InstructionContext is an immutable context for use when minting pseudo instructions.
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/disassemble/Disassembler.java