- Before-compile tasks are executed in the IntelliJ process.
- Some source generation tasks that depend on the PSI (e.g. UI designer form to source compilation) are executed in the IntelliJ process.
- BuildTargetScopeProvider extensions are called to calculate the scope of the external build (the set of build targets to compile based on the target module to make and the known set of changes).
- The external build process is spawned (or an existing build process background process is reused).
- The external build process loads the IntelliJ IDEA project model (.idea, .iml files and so on), represented by a
- The full tree of targets to build is calculated, based on the dependencies of each build target to be compiled.
- For each target, the set of builders capable of building this target is calculated.
- For every target and every builder, the build() method is called. This can happen in parallel if the "Compile independent modules in parallel" option is enabled in the settings. For module-level builders, the order of invoking builders for a single target is determined by their category; for other builders, the order is undefined.
- Caches to record the state of the compilation are saved.
- Compilation messages reported through the CompileContext API are transmitted to the IntelliJ process and displayed in the UI (in the Messages view).
- Post-compile tasks are executed in the IntelliJ process.