What’s New in MPS 2024.3

MPS 2024.3 introduces improvements to the UI, reworked internals of many components, and binary-enabled TextGen. You will also find enhanced support for icons and numerous platform updates.

Check out the detailed list of enhancements below.

Logical View Roots

Top-level folder for transient and checkpoint models

The ProjectView tool window now provides three top-level folders to keep the structure of the project better organized:

  • Project Name
  • Modules Pool
  • Checkpoints and Transient Models

The Checkpoints and Transient Models folder is always displayed below the Modules Pool, and is empty unless any transient or checkpoint models are available. These models are displayed under this folder, and not at the top level as they used to be.

As a side effect, the new Checkpoints and Transient Models folder allows the ProjectView tool window to remember the expanded and collapsed subtrees of the project structure across MPS restarts.

Enable Preview Tab

Enable preview tab option

The following options to enable/disable the Preview Tab provided by the IntelliJ Platform are now respected by MPS and guarantee the same behavior of the editor as in other JetBrains tools:

  • Settings | Editor | General | Editor Tabs | Opening Policy | Enable Preview Tab
  • Logical View | Behavior | Enable Preview Tab
Updated dialog design for tooltips 2

launchtests: reports directory path option

An additional option, reports dir, has been added to the options section of a test configuration in build scripts. The user can specify the output directory where the generated JUnit test reports are to be stored.

Inspector

Quick-fix applicability condition control

A new section named applicable has been added to Quick-Fix definitions to let you control the applicability of a quick-fix. The default value <always> guarantees unrestricted applicability.

Icon handling

Icons and images that use a path relative to the module are no longer copied during generation next to the places of their individual usage. Instead, they are copied to the distribution module once as image files and are available for use at this single location. This has two immediate benefits: avoiding the duplication of image files to save disk space and the ability to access the images both from the distribution and from the source module.

Constant icons

Constant icons

In addition to the existing TextIcon and FileIcon concepts, a new ConstantFieldIcon concept is now available. It allows an icon to be specified by reference to a concrete static field declaration holding an instance of javax.swing.Icon.

TextGen binary outcome

Inspired by the need for better handling of icon files, we’ve added a new mechanism to produce binary output during the text generation process, instead of text. The new API consists of a write operation that directly manipulates data as instances of byte[].

Tool windows migrated away from ProjectComponent

All tool windows, such as Inspector, HierarchyView, and Usages, have been reworked to no longer follow the long-deprecated mechanism of the IntelliJ Platform’s project components (ProjectComponent). The changes to the API have been minimal, but for some tool windows, there is a change in how they are obtained from code:

  • The Project.getComponent() method no longer returns any of the tool windows.
  • Tools that are implemented as an MPS tool concept can be obtained using com.intellij.openapi.project.Project.tool <ToolConcept>.
  • Tools that are frequently used from Java provide a static getInstance() method:
    • UsagesViewTool.getInstance()
    • InspectorTool.getInstance()
  • The Inspector tool is traditionally also available from EditorContext.inspectorTool().

IntelliJ Platform components and services

In addition to tool windows, most of the MPS core functionality has been reworked not to use IntelliJ IDEA’s ApplicationComponent and ProjectComponent.

MPS used to rely heavily on the IntelliJ Platform facilities to compose the complete application. Now, most of the legacy components have been refactored to use contemporary MPS or IntelliJ IDEA APIs (like IntelliJ IDEA’s application/project services and extension points, MPS’ CoreComponents and extensions, etc.). There are still a few components left, which the MPS team plans to get rid of completely in the next release.

Most users probably won’t notice any difference, with the exception of reduced startup times.

Please consult the Migration Guide if your code fails to locate any of the platform components because it uses an obsolete retrieval mechanism.

Switched to the new UI

MPS now uses the new UI. The old version of the UI can be enabled by installing the Classic UI plugin.

Numerous bug fixes

As usual, this build fixes quite a few bugs. You can find the full list of issues we’ve fixed here.

Platform updates

Switch to JBR21

We’re transitioning from JetBrains Runtime 17 (JBR17) to JetBrains Runtime 21 (JBR21). Starting with IntelliJ IDEA 2024.2, all IDE updates will come with JBR21, offering enhanced security and performance as well as Wayland rendering support for Linux.

Proxy setting auto-detection enabled by default for new users

IntelliJ IDEA now automatically detects system proxy settings configured on your machine and uses them by default, facilitating seamless interaction with external resources and services.

Improved Customize Main Toolbar dialog

We’ve redesigned the layout and behavior of the UI elements in the Customize Main Toolbar dialog, making it more intuitive and organized. It’s now easier to search for, add, and delete actions in the main toolbar.

Increased default tab limit

We’ve increased the default tab limit in the editor to 30. This means you can now keep more tabs open before the IDE starts closing the ones used least recently. You can control this setting in Settings | Editor | General | Editor Tabs.

Support for math syntax in Markdown files

IntelliJ IDEA can now natively render mathematical expressions in Markdown files. When working with Markdown, you can use $ to insert inline math expressions and $$ for code blocks with math content.

Tags in the Version Control widget

We’ve given tags a dedicated node in the Version Control widget, making it easier to check them out. The node is displayed by default, but if you prefer to hide it, simply click the gear icon and uncheck the Show Tags option.

Improved user experience with the Log tool window

All settings related to the Log tool window have been consolidated into a dedicated settings page, which you can access either through Settings/Preferences | Version Control | Log or via a new drop-down menu on the Log tool window’s toolbar.

Branch name on the Welcome screen

The Welcome screen now shows the branch name, helping you stay organized when handling multiple project versions and allowing you to easily switch between working directories.

New First Parent and No Merges in Graph Options

We’ve added new Git options to simplify viewing branch histories. Use the First Parent option to focus on the mainline changes by hiding individual commits from merges. Alternatively, you can filter out merge commits entirely with the No Merges option. Both options are now available under the Graph Options icon in the Git tool window, making it easier to track changes in your branches.

New terminal improvements
Beta

The new terminal now offers enhanced command processing, and the alignment of its UI has been refined, delivering a smoother, more intuitive experience. The terminal is now more responsive and processes prompts faster. Session switching is now seamless, with consistent state retention across tabs to ensure your workflow is not interrupted. Autocompletion accesses command names, flags, and paths more quickly, reducing manual input. We've also introduced additional customization options, including for prompt styles, session names, and environment variables, giving you greater control over your terminal environment.

Migration Guide

For every major release, we prepare instructions on how to migrate from older MPS versions to ensure everything goes smoothly. Please review them carefully.