protected TraceObject getProcessForSpace(AddressSpace space) {
		List<TraceObjectProcess> processes = trace.getObjectManager()
				.queryAllInterface(Lifespan.at(getSnap()), TraceObjectProcess.class)
				.toList();
		if (processes.size() == 1) {
			return processes.get(0).getObject();
		}
		if (processes.isEmpty()) {
			return null;
		}
		for (TraceMemoryRegion region : trace.getMemoryManager()
				.getRegionsIntersecting(
					Lifespan.at(getSnap()),
					new AddressRangeImpl(space.getMinAddress(), space.getMaxAddress()))) {
			TraceObject obj = ((TraceObjectMemoryRegion) region).getObject();
			return obj.findCanonicalAncestorsInterface(TraceObjectProcess.class)
					.findFirst()
					.orElse(null);
		}
		return null;
	}
Search for the most preferred method for a given operation, with respect to a given path

<p>
A given path should be given as a point of reference, usually the current object or the
object from the UI action context. If given, parameters that require a certain
{@link TraceObjectInterface} will seek a suitable schema from that path and require it.
Otherwise, any parameter whose schema includes the interface will be accepted.

@param <T> the matcher class representing the desired operation
@param cls the matcher class representing the desired operation
@param path a path as a point of reference, or null for "any" point of reference.
@param action the required action name for a matching method
@param preferred the list of matchers (signatures) in preferred order
@return the best method, or null
Ghidra/Debug/Debugger-rmi-trace/src/main/java/ghidra/app/plugin/core/debug/service/tracermi/TraceRmiTarget.java