private void initTree() {
    myRootNode.removeAllChildren();
    final HashMap<CoverageRunner, Map<String, List<CoverageSuite>>> grouped = new HashMap<>();
    groupSuites(grouped, myCoverageManager.getSuites());
    final List<CoverageRunner> runners = new ArrayList<>(grouped.keySet());
    runners.sort((o1, o2) -> o1.getPresentableName().compareToIgnoreCase(o2.getPresentableName()));
    for (CoverageRunner runner : runners) {
      final DefaultMutableTreeNode runnerNode = new DefaultMutableTreeNode(getCoverageRunnerTitle(runner));
      myRootNode.add(runnerNode);
      final Map<String, List<CoverageSuite>> providers = grouped.get(runner);
      if (providers.size() == 1) {
        String providerKey = providers.keySet().iterator().next();
        DefaultMutableTreeNode parent = runnerNode;
        if (!isLocalProvider(providerKey)) {
          DefaultMutableTreeNode remoteNode = new DefaultMutableTreeNode(CoverageBundle.message("remote.suites.node"));
          parent.add(remoteNode);
          parent = remoteNode;
        }
        List<CoverageSuite> suites = providers.get(providerKey);
        createSuitesNodes(suites, parent);
      }
      else {
        DefaultMutableTreeNode localNode = new DefaultMutableTreeNode(LOCAL);
        DefaultMutableTreeNode remoteNode = new DefaultMutableTreeNode(CoverageBundle.message("remote.suites.node"));
        runnerNode.add(localNode);
        runnerNode.add(remoteNode);
        for (var entry : providers.entrySet()) {
          DefaultMutableTreeNode parent = isLocalProvider(entry.getKey()) ? localNode : remoteNode;
          createSuitesNodes(entry.getValue(), parent);
        }
      }
    }
  }
private void initTree()