private List<AddressableRowObject> doProcessRows(List<AddressableRowObject> rowObjects,
			TaskMonitor monitor) {

		List<AddressableRowObject> deleted = new ArrayList<>();
		if (executor.executeInBulk(rowObjects, deleted, monitor)) {
			return deleted;
		}

		for (AddressableRowObject rowObject : rowObjects) {
			if (monitor.isCancelled()) {
				break;
			}

			if (!model.containsObject(rowObject)) {
				// this implies the item has been programmatically removed
				monitor.incrementProgress(1);
				continue;
			}

			monitor.setMessage("Processing item at address " + rowObject.getAddress());
			if (executor.execute(rowObject)) {
				deleted.add(rowObject);
			}

			monitor.incrementProgress(1);
			table.repaint(); // in case the data is updated while processing
		}

		return deleted;
	}
Returns true if the given object is still in the dialog.  Clients can use this method to see
if the user has already processed the given item.
@param rowObject the row object
@return true if the object is still in the dialog
Ghidra/Features/Base/src/main/java/ghidra/app/tablechooser/TableChooserDialog.java