@Override
  public @NotNull List<? extends XAttachDebugger> getAvailableDebuggers(@NotNull Project project,
                                                                        @NotNull XAttachHost attachHost,
                                                                        @NotNull ProcessInfo processInfo,
                                                                        @NotNull UserDataHolder contextHolder) {
    Map<String, LocalAttachInfo> addressMap = contextHolder.getUserData(ADDRESS_MAP_KEY);
    if (addressMap == null) {
      addressMap = new HashMap<>();
      contextHolder.putUserData(ADDRESS_MAP_KEY, addressMap);
      final Map<String, LocalAttachInfo> map = addressMap;
      Set<String> attachedPids = JavaDebuggerAttachUtil.getAttachedPids(project);
      VirtualMachine.list().forEach(desc -> {
        String pid = desc.id();
        // no need to validate the process, it is already validated inside VirtualMachine.list()
        LocalAttachInfo address = getProcessAttachInfo(pid, attachedPids, false);
        if (address != null) {
          map.put(pid, address);
        }
      });
    }

    LocalAttachInfo info = getAttachInfo(project, processInfo.getPid(), processInfo.getCommandLine(), addressMap);
    if (info != null && isDebuggerAttach(info)) {
      return Collections.singletonList(new JavaLocalAttachDebugger(project, info));
    }
    return Collections.emptyList();
  }
@Override
  public @NotNull List<? extends XAttachDebugger> getAvailableDebuggers(@NotNull Project project,
                                                                        @NotNull XAttachHost attachHost,
                                                                        @NotNull ProcessInfo processInfo,
                                                                        @NotNull UserDataHolder contextHolder)