@TraceMethod(display = "Set class filter")
	public void set_class_filter(
			@Param(
				schema = "Event",
				description = "Event",
				display = "Event",
				name = "event") RmiTraceObject obj,
			@Param(
				description = "Filter Pattern",
				display = "Filter",
				name = "filter") String filter,
			@Param(
				description = "Exclude",
				display = "Exclude",
				name = "exclude") boolean exclude) {
		Object ctxt = getObjectFromPath(obj.getPath());
		if (ctxt instanceof MethodEntryRequest req) {
			req.disable();
			if (exclude) {
				req.addClassExclusionFilter(filter);
				cmds.setValue(obj.getPath(), ATTR_EXCLUDE, filter);
			}
			else {
				req.addClassFilter(filter);
				cmds.setValue(obj.getPath(), ATTR_INCLUDE, filter);
			}
			req.enable();
		}
		if (ctxt instanceof MethodExitRequest req) {
			req.disable();
			if (exclude) {
				req.addClassExclusionFilter(filter);
				cmds.setValue(obj.getPath(), ATTR_EXCLUDE, filter);
			}
			else {
				req.addClassFilter(filter);
				cmds.setValue(obj.getPath(), ATTR_INCLUDE, filter);
			}
			req.enable();
		}
		if (ctxt instanceof ClassPrepareRequest req) {
			req.disable();
			if (exclude) {
				req.addClassExclusionFilter(filter);
				cmds.setValue(obj.getPath(), ATTR_EXCLUDE, filter);
			}
			else {
				req.addClassFilter(filter);
				cmds.setValue(obj.getPath(), ATTR_INCLUDE, filter);
			}
			req.enable();
		}
		if (ctxt instanceof ClassUnloadRequest req) {
			req.disable();
			if (exclude) {
				req.addClassExclusionFilter(filter);
				cmds.setValue(obj.getPath(), ATTR_EXCLUDE, filter);
			}
			else {
				req.addClassFilter(filter);
				cmds.setValue(obj.getPath(), ATTR_INCLUDE, filter);
			}
			req.enable();
		}
		if (ctxt instanceof MonitorContendedEnterRequest req) {
			req.disable();
			if (exclude) {
				req.addClassExclusionFilter(filter);
				cmds.setValue(obj.getPath(), ATTR_EXCLUDE, filter);
			}
			else {
				req.addClassFilter(filter);
				cmds.setValue(obj.getPath(), ATTR_INCLUDE, filter);
			}
			req.enable();
		}
		if (ctxt instanceof MonitorContendedEnteredRequest req) {
			req.disable();
			if (exclude) {
				req.addClassExclusionFilter(filter);
				cmds.setValue(obj.getPath(), ATTR_EXCLUDE, filter);
			}
			else {
				req.addClassFilter(filter);
				cmds.setValue(obj.getPath(), ATTR_INCLUDE, filter);
			}
			req.enable();
		}
		if (ctxt instanceof MonitorWaitRequest req) {
			req.disable();
			if (exclude) {
				req.addClassExclusionFilter(filter);
				cmds.setValue(obj.getPath(), ATTR_EXCLUDE, filter);
			}
			else {
				req.addClassFilter(filter);
				cmds.setValue(obj.getPath(), ATTR_INCLUDE, filter);
			}
			req.enable();
		}
		if (ctxt instanceof MonitorWaitedRequest req) {
			req.disable();
			if (exclude) {
				req.addClassExclusionFilter(filter);
				cmds.setValue(obj.getPath(), ATTR_EXCLUDE, filter);
			}
			else {
				req.addClassFilter(filter);
				cmds.setValue(obj.getPath(), ATTR_INCLUDE, filter);
			}
			req.enable();
		}
		cmds.putEvents();
	}
NB: For the VirtualMachine, the step methods add requests for break-on-step for all threads.
These requests will remain pending until the VM is resumed.
Ghidra/Debug/Debugger-jpda/src/main/java/ghidra/dbg/jdi/rmi/jpda/JdiMethods.java