IntelliJ Platform Plugin SDK Help

Supporting Module Types

IntelliJ 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.

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 DemoModuleType 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.

New Module Type
Last modified: 27 February 2023