void (final SuspendContextImpl suspendContext, final ThreadReferenceProxyImpl stepThread, int size, int depth, RequestHint hint, Object commandToken) { if (stepThread == null) { return; } try { final ThreadReference stepThreadReference = stepThread.getThreadReference(); if (LOG.isDebugEnabled()) { LOG.debug("DO_STEP: creating step request for " + stepThreadReference); } deleteStepRequests(stepThreadReference); EventRequestManager requestManager = getVirtualMachineProxy().eventRequestManager(); StepRequest stepRequest = requestManager.createStepRequest(stepThreadReference, size, depth); if (!(hint != null && hint.isIgnoreFilters()) && !isPositionFiltered(getLocation(stepThread, suspendContext))) { getActiveFilters().forEach(f -> stepRequest.addClassExclusionFilter(f.getPattern())); } // suspend policy to match the suspend policy of the context: // if all threads were suspended, then during stepping all the threads must be suspended // if only event thread was suspended, then only this particular thread must be suspended during stepping stepRequest.setSuspendPolicy(suspendContext.getSuspendPolicy() == EventRequest.SUSPEND_EVENT_THREAD ? EventRequest.SUSPEND_EVENT_THREAD : EventRequest.SUSPEND_ALL); stepRequest.addCountFilter(1); if (hint != null) { stepRequest.putProperty("hint", hint); } if (commandToken != null) { stepRequest.putProperty("commandToken", commandToken); } DebuggerUtilsAsync.setEnabled(stepRequest, true).whenComplete((__, e) -> { if (DebuggerUtilsAsync.unwrap(e) instanceof IllegalThreadStateException) { DebuggerUtilsAsync.deleteEventRequest(requestManager, stepRequest); } }); } catch (ObjectCollectedException ignored) { } }