public static <C extends ServerConfiguration> RemoteServer<C> addNewRemoteServer(@NotNull Project project,
                                                                                   @NotNull ServerType<C> serverType,
                                                                                   @Nullable Class<?> contributorClass) {
    String name = generateUniqueServerName(serverType);
    RemoteServersManager remoteServersManager = RemoteServersManager.getInstance();
    RemoteServer<C> server = remoteServersManager.createServer(serverType, name);
    SingleRemoteServerConfigurable configurable = new SingleRemoteServerConfigurable(server, null, true);
    configurable.setDisplayName(CloudBundle.message("new.cloud.connection.configurable.title", serverType.getPresentableName()));
    Runnable advancedInitialization = () -> {
      configurable.setDisplayName(name);
      configurable.updateName();
    };
    if (ShowSettingsUtil.getInstance().editConfigurable(project, configurable, advancedInitialization)) {
      remoteServersManager.addServer(server);
      if (contributorClass != null) {
        ServerConnectionManager.getInstance().getOrCreateConnection(server).connect(EmptyRunnable.INSTANCE);
        RemoteServerNode node = new RemoteServerNode(project, server, (connection, serverNode, deployment) -> null);
        ServiceViewManager.getInstance(project).select(node, contributorClass, true, true);
      }
      return server;
    }
    return null;
  }
public static <C extends ServerConfiguration> RemoteServer<C> addNewRemoteServer(@NotNull Project project,
                                                                                   @NotNull ServerType<C> serverType,
                                                                                   @Nullable Class<?> contributorClass)