private void loadGroups() {
    for (ServiceViewContributor<?> contributor : CONTRIBUTOR_EP_NAME.getExtensionList()) {
      addToGroup(contributor);
      myNotInitializedContributors.add(contributor);
    }

    registerToolWindows(myGroups.keySet());

    Disposable disposable = Disposer.newDisposable();
    Disposer.register(myProject, disposable);
    myProject.getMessageBus().connect(disposable).subscribe(ToolWindowManagerListener.TOPIC, new ToolWindowManagerListener() {
      @Override
      public void toolWindowShown(@NotNull ToolWindow toolWindow) {
        Collection<ServiceViewContributor<?>> contributors = myGroups.get(toolWindow.getId());
        if (contributors != null) {
          for (ServiceViewContributor<?> contributor : contributors) {
            if (myNotInitializedContributors.remove(contributor)) {
              ServiceEvent e = ServiceEvent.createResetEvent(contributor.getClass());
              myModel.handle(e);
            }
          }
        }
        if (myNotInitializedContributors.isEmpty()) {
          Disposer.dispose(disposable);
        }
      }
    });
  }
private void loadGroups()