Supporting Module Types
Edit pageLast modified: 14 May 2024IntelliJ Platform provides a set of standard module types. However, an application might need a module of a type that isn't supported yet. This tutorial shows how to register a new module type and link it to the project creation procedure and the UI.
The source code for the module
and project_wizard
code samples is used throughout this tutorial.
Pre-Requirements
Create an empty plugin project. See the Creating a Plugin Gradle Project section for details.
note
The UI for selecting module types and the creation of modules through project wizard is IntelliJ IDEA-specific.
Register a New Module Type
Add a new com.intellij.moduleType
implementation with the IntelliJ Platform in the plugin.xml configuration file.
<extensions defaultExtensionNs="com.intellij">
<moduleType
id="DEMO_MODULE_TYPE"
implementationClass="org.intellij.sdk.module.DemoModuleType"/>
</extensions>
Implement ModuleType
Interface
Create the DemoModuleType
implementation based on ModuleType
.
getNodeIcon()
should return module type specific icon.
final class DemoModuleType extends ModuleType<DemoModuleBuilder> {
private static final String ID = "DEMO_MODULE_TYPE";
DemoModuleType() {
super(ID);
}
public static DemoModuleType getInstance() {
return (DemoModuleType) ModuleTypeManager.getInstance().findByID(ID);
}
@NotNull
@Override
public DemoModuleBuilder createModuleBuilder() {
return new DemoModuleBuilder();
}
@NotNull
@Override
public String getName() {
return "SDK Module Type";
}
@NotNull
@Override
public String getDescription() {
return "Example custom module type";
}
@NotNull
@Override
public Icon getNodeIcon(@Deprecated boolean b) {
return SdkIcons.Sdk_default_icon;
}
@Override
public ModuleWizardStep @NotNull [] createWizardSteps(@NotNull WizardContext wizardContext,
@NotNull DemoModuleBuilder moduleBuilder,
@NotNull ModulesProvider modulesProvider) {
return super.createWizardSteps(wizardContext, moduleBuilder, modulesProvider);
}
}
Implement Custom Module Builder
Create DemoModuleBuilder
based on ModuleBuilder
.
public class DemoModuleBuilder extends ModuleBuilder {
@Override
public void setupRootModel(@NotNull ModifiableRootModel model) {
}
@Override
public ModuleType<DemoModuleBuilder> getModuleType() {
return DemoModuleType.getInstance();
}
@Nullable
@Override
public ModuleWizardStep getCustomOptionsStep(WizardContext context, Disposable parentDisposable) {
return new DemoModuleWizardStep();
}
}
Provide Custom Wizard Steps
Provide a straightforward implementation of UI components for the project creating stage. Create a generic DemoModuleWizardStep
based on ModuleWizardStep
public class DemoModuleWizardStep extends ModuleWizardStep {
@Override
public JComponent getComponent() {
return new JLabel("Provide some setting here");
}
@Override
public void updateDataModel() {
//todo update model according to UI
}
}
Creating a Module of New Type
After compiling and running the plugin in a development instance, create a new project. Select File | New | Module.... A new module type and its settings panel are available in the Project Wizard.

Thanks for your feedback!