@Override
  public @NotNull ModuleBuilder createModuleBuilder() {
    return new GeneralModuleBuilder() {
      @Override
      public @NotNull List<Class<? extends ModuleWizardStep>> getIgnoredSteps() {
        return List.of(ProjectSettingsStep.class);
      }

      @Override
      public @NotNull ModuleWizardStep getCustomOptionsStep(WizardContext context,
                                                            Disposable parentDisposable) {
        ProjectSettingsStep step = new ProjectSettingsStep(context);
        step.getExpertPlaceholder().removeAll();
        JTextPane textPane = new JTextPane();
        textPane.setText(getDescription());
        step.getExpertPlaceholder().setMinimumSize(new Dimension(0, 100));
        step.getExpertPlaceholder().add(ScrollPaneFactory.createScrollPane(textPane));
        return step;
      }

      @Override
      public boolean isAvailable() {
        return false;
      }

      @Override
      public ModuleType<?> getModuleType() {
        return GeneralModuleTypeForIdea.this;
      }

      @Override
      public @Nullable List<Module> commit(@NotNull Project project,
                                           ModifiableModuleModel model,
                                           ModulesProvider modulesProvider) {
        List<Module> modules = super.commit(project, model, modulesProvider);
        scheduleTooltip(project);
        return modules;
      }

      private static void scheduleTooltip(@NotNull Project project) {
        StartupManager.getInstance(project).runAfterOpened(() -> {
          if (ProjectView.getInstance(project).getCurrentProjectViewPane() != null) {
            showTooltip(project);
            return;
          }
          project.getMessageBus().connect().subscribe(ToolWindowManagerListener.TOPIC, new ToolWindowManagerListener() {
            @Override
            public void toolWindowShown(@NotNull ToolWindow toolWindow) {
              if (!"Project".equals(toolWindow.getId())) return;
              showTooltip(project);
            }
          });
        });
      }

      private static void showTooltip(Project project) {
        ApplicationManager.getApplication().invokeLater(() -> {
          JTree tree = ProjectView.getInstance(project).getCurrentProjectViewPane().getTree();
          if (tree == null) return; // too early

          String shortcutText = KeymapUtil.getShortcutText(IdeActions.ACTION_NEW_ELEMENT);
          GotItTooltip tooltip =
            new GotItTooltip("empty.project.create.file", IdeBundle.message("to.create.new.file.tooltip", shortcutText), project)
              .withPosition(Balloon.Position.atRight);
          ApplicationManager.getApplication().getMessageBus().connect(tooltip).subscribe(AnActionListener.TOPIC, new AnActionListener() {
                                                                                              @Override
                                                                                              public void afterActionPerformed(@NotNull AnAction action,
                                                                                                                               @NotNull AnActionEvent event,
                                                                                                                               @NotNull AnActionResult result) {
                                                                                                tooltip.gotIt();
                                                                                                Disposer.dispose(tooltip);
                                                                                              }
                                                                                            });
          tooltip.show(tree, (component, balloon) -> getPoint(tree));
        });
      }

      private static Point getPoint(JTree tree) {
        TreePath path = tree.getSelectionPath();
        Rectangle bounds = tree.getPathBounds(path);
        int x = tree.getVisibleRect().width + 5;
        return bounds == null ? new Point(x, 10) : new Point(x, (int)bounds.getCenterY());
      }
    };
  }
@Override
  public @NotNull ModuleBuilder createModuleBuilder()