Legacy Project Wizard API
Implementing a New Module Type
Additional support for specific tools and technologies is usually done via implementing some certain module type, which is attached to the project. A new module type should be derived from the class ModuleType
.
Custom Project Wizard
The main utilities to configure a custom project wizard can be found in the package lang-api.ide.util.projectWizard
. These classes and interfaces serve the following purposes:
Modification of the configuration wizard view
Adding new steps to the wizard
Providing additional settings for project creation
Handling activities during project creation
Initial environment configuration
Module Type
To create a new module type, implement ModuleType
parameterized by ModuleBuilder
and register it in the com.intellij.moduleType
extension point in plugin.xml file.
Implementing Module Builder
To set up a new module environment, ModuleBuilder
should be extended and registered in the com.intellij.moduleBuilder
extension point.
Functionality which is mandatory to implement consists of:
void setupRootModel(ModifiableRootModel)
- sets up a root model for the new moduleModuleType getModuleType()
- returns a module type
See JavaModuleBuilder
to understand better how to implement a module builder.
Implementing Module Builder Listener
Module builder listener reacts on a new module creation, which could be done either as a part of the project creation process or as adding a new module to the already existing project. To provide a certain behavior right after a module has been created, a module builder must implement ModuleBuilderListener.moduleCreated(Module)
.
Examples of the tasks executed right after a module has been created may include configuring module roots, looking up for an SDK and setting it up, adding a specific facet if required, etc.
Adding New Wizard Steps
Adding new steps to the module wizard can be done by overriding AbstractModuleBuilder.createWizardSteps(WizardContext, ModulesProvider)
.
If this method returns a non-empty array of ModuleWizardStep
objects, new steps will be shown in their indexing order while creating a new module.
ModuleWizardStep
has two methods to be overridden:
JComponent getComponent()
- defines the step's UIvoid updateDataModel()
- commits data from UI intoModuleBuilder
andWizardContext
Facet
Facets in IntelliJ are the way to store multiple kinds of module-specific settings, for example, to make a language support or framework available in some given module. To understand facets better from the end-user's point of view, see the Facet documentation section.
Implementing Project Structure Detector
To support the creation of your module when a project is imported from existing sources, extend ProjectStructureDetector
. To detect the files your module supports, implement ProjectStructureDetector.detectRoots()
.
Detecting files is not enough - it is also required to create a module for the project, if appropriate, by implementing setupProjectStructure()
. Here is an example that creates a module if no other modules exist in the project structure.