Adding New Steps to Project Wizard
This tutorial shows how to add an extra step to the Project Wizard to provide additional project configuration settings.
Create an empty plugin project. See the Creating a Plugin Gradle Project section for details.
Project configuration settings depend on the project's module type. Register a new com.intellij.moduleBuilder
extension point in the plugin.xml configuration file.
<extensions defaultExtensionNs="com.intellij">
<moduleBuilder
builderClass="org.intellij.sdk.project.wizard.DemoModuleWizardStep"
id="DEMO_STEP"
order="first"/>
</extensions>
Extend ModuleBuilder
class to provide custom configuration.
public class DemoModuleWizardStep extends ModuleBuilder {
public void setupRootModel(ModifiableRootModel modifiableRootModel)
throws ConfigurationException {
}
}
Set a module type for the extra wizard step to provide. In this example, choose an EMPTY
module type.
public class DemoModuleWizardStep extends ModuleBuilder {
public void setupRootModel(ModifiableRootModel modifiableRootModel)
throws ConfigurationException {
}
public ModuleType getModuleType() {
return ModuleType.EMPTY; //or it could be any other module type
}
}
Provide an implementation of a custom UI component to be added to the Wizard. In this case, leave it as a label.
public class DemoModuleWizardStep extends ModuleBuilder {
public void setupRootModel(ModifiableRootModel modifiableRootModel)
throws ConfigurationException {
}
public ModuleType getModuleType() {
return ModuleType.EMPTY;
}
@Override
public ModuleWizardStep[] createWizardSteps(
@NotNull WizardContext wizardContext,
@NotNull ModulesProvider modulesProvider) {
return new ModuleWizardStep[]{new ModuleWizardStep() {
@Override
public JComponent getComponent() {
return new JLabel("Put your content here");
}
@Override
public void updateDataModel() {
}
}};
}
}
After compiling and running the plugin, create a new project using a source-compiled instance of IntelliJ IDEA.

Choose an Empty Module type, click next, and get to the just added extra step.

Modify and tune the UI component depending on requirements.