@Override
	public void actionPerformed(ActionContext context) {
		AddressSet entries = new AddressSet();
		for (FunctionStartRowObject row : model.getRowObjects(table.getSelectedRows())) {
			switch (row.getCurrentInterpretation()) {
				case UNDEFINED:
					entries.add(row.getAddress());
				default:
					break;
			}
		}
		DisassembleCommand cmd = new DisassembleCommand(entries, null, true);

		RandomForestRowObject row = model.getRandomForestRowObject();
		if (row.isContextRestricted()) {
			ProgramContext programContext = program.getProgramContext();
			List<String> regNames = row.getContextRegisterList();
			List<BigInteger> regValues = row.getContextRegisterValues();
			RegisterValue newValue = new RegisterValue(programContext.getBaseContextRegister());
			for (int i = 0; i < regNames.size(); ++i) {
				Register reg = program.getRegister(regNames.get(i));
				newValue = newValue.combineValues(new RegisterValue(reg, regValues.get(i)));
			}
			cmd.setInitialContext(newValue);
		}
		plugin.getTool().executeBackgroundCommand(cmd, program);
	}
Creates an action for disassembling at rows in a {@link FunctionStartTableModel} if the
{@link Interpretation} of the row is {@link Interpretation#UNDEFINED}.  Specified 
context register values are set before disassembly.  
@param plugin owning plugin
@param program source program
@param table table
@param model table model
Ghidra/Extensions/MachineLearning/src/main/java/ghidra/machinelearning/functionfinding/DisassembleAndApplyContextAction.java