void (@NotNull final AnActionEvent e) { final DebuggerTreeNodeImpl[] nodes = getSelectedNodes(e.getDataContext()); if (nodes == null) { return; } final List<ThreadReferenceProxyImpl> threadsToInterrupt = new ArrayList<>(); for (final DebuggerTreeNodeImpl debuggerTreeNode : nodes) { final NodeDescriptorImpl descriptor = debuggerTreeNode.getDescriptor(); if (descriptor instanceof ThreadDescriptorImpl) { threadsToInterrupt.add(((ThreadDescriptorImpl)descriptor).getThreadReference()); } } if (!threadsToInterrupt.isEmpty()) { final DebuggerContextImpl debuggerContext = getDebuggerContext(e.getDataContext()); final DebugProcessImpl debugProcess = debuggerContext.getDebugProcess(); if (debugProcess != null) { debugProcess.getManagerThread().schedule(new DebuggerCommandImpl() { @Override protected void action() { boolean unsupported = false; for (ThreadReferenceProxyImpl thread : threadsToInterrupt) { try { thread.getThreadReference().interrupt(); } catch (UnsupportedOperationException ignored) { unsupported = true; } } if (unsupported) { final Project project = debugProcess.getProject(); XDebuggerManagerImpl.getNotificationGroup() .createNotification(JavaDebuggerBundle.message("thread.operation.interrupt.is.not.supported.by.vm"), MessageType.INFO).notify(project); } } }); } } }