@Override
  public final void generateProject(final @NotNull Project project,
                                    final @NotNull VirtualFile baseDir,
                                    final @NotNull T settings,
                                    final @NotNull Module module) {
    // Use NO_SETTINGS to avoid nullable settings of project generator
    if (settings == NO_SETTINGS) {
      // We are in Intellij Module and framework is implemented as project template, not facet.
      // See class doc for mote info
      configureProjectNoSettings(project, baseDir, module);
      return;
    }

    /*Instead of this method overwrite ``configureProject``*/

    // If we deal with remote project -- use remote manager to configure it
    final Sdk sdk = settings.getSdk();
    LOGGER.info(String.format("Wizard created PythonSDK %s", sdk));
    if (sdk instanceof PyLazySdk) {
      final Sdk createdSdk = ((PyLazySdk)sdk).create();
      LOGGER.info(String.format("Lazy PythonSDK generated sdk: %s", createdSdk));
      settings.setSdk(createdSdk);
      if (createdSdk != null && !useNewInterpreterCreationUi()) {
        SdkConfigurationUtil.addSdk(createdSdk);
      }
    }

    final PyProjectSynchronizer synchronizer = sdk != null ? PyProjectSynchronizerProvider.getSynchronizer(sdk) : null;

    if (synchronizer != null) {
      // Before project creation we need to configure sync
      // We call "checkSynchronizationAvailable" until it returns success (means sync is available)
      // Or user confirms she does not need sync
      String userProvidedPath = settings.getRemotePath();
      while (true) {
        final String syncError = synchronizer.checkSynchronizationAvailable(new PySyncCheckCreateIfPossible(module, userProvidedPath));
        if (syncError == null) {
          break;
        }
        userProvidedPath = null; // According to checkSynchronizationAvailable should be cleared
        final String message =
          PyBundle.message("python.new.project.synchronization.not.configured.dialog.message", syncError);
        if (Messages.showYesNoDialog(project,
                                     message,
                                     PyBundle.message("python.new.project.synchronization.not.configured.dialog.title"),
                                     General.WarningDialog) == Messages.YES) {
          break;
        }
      }
    }

    configureProject(project, baseDir, settings, module, synchronizer);
    reportStatistics(settings);
  }
@Override
  public final void generateProject(final @NotNull Project project,
                                    final @NotNull VirtualFile baseDir,
                                    final @NotNull T settings,
                                    final @NotNull Module module)