void (@NotNull final ThreadReference blockedThread, @NotNull final ThreadReference blockingThread, final DebugProcessImpl process) { XDebuggerManagerImpl.getNotificationGroup() .createNotification(JavaDebuggerBundle.message("status.thread.blocked.by", blockedThread.name(), blockingThread.name()), JavaDebuggerBundle.message("status.thread.blocked.by.resume", blockingThread.name()), NotificationType.INFORMATION) .setListener((notification, event) -> { if (event.getEventType() == HyperlinkEvent.EventType.ACTIVATED) { notification.expire(); process.getManagerThread().schedule(new DebuggerCommandImpl() { @Override protected void action() { ThreadReferenceProxyImpl threadProxy = process.getVirtualMachineProxy().getThreadReferenceProxy(blockingThread); SuspendContextImpl suspendingContext = SuspendManagerUtil.getSuspendingContext(process.getSuspendManager(), threadProxy); process.getManagerThread() .invoke(process.createResumeThreadCommand(suspendingContext, threadProxy)); } }); } }) .notify(process.getProject()); }