@Override
  public void actionPerformed(@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);
            }
          }
        });
      }
    }
  }
@Override
  public void actionPerformed(@NotNull final AnActionEvent e)