What’s New in MPS 2019.3

Quick Definition Action

Quick Definition Action

Quick Definition is similar to its counterpart in IntelliJ IDEA. Click on a node, press and hold Ctrl-Shift-I, and you will get a popup with the definition of the node. In this popup, you can navigate, select other nodes, and perform the Find action. This way, you don’t need to open a new tab every time you want a quick glance at the node.

Learn more

Model unloading

Model unloading

It's now possible to improve memory consumption by explicitly removing all models from memory. You can either click the memory indicator or set a scheduled cleanup parameter (in seconds) with Registry Action. At the moment, this feature is experimental, and we're planning to improve it in future releases.

Learn more

Standalone generator modules

Standalone generator modules and multiple generators per language

Now you can create more than one generator for a language, and either host them inside a language (as in previous versions) or add them next to a language as a regular top-level module. Using generator plans allows you to take full advantage of multiple generators. To help with the transition, only one of the language generators will continue to be involved for a model without an explicit generation plan. The new generator can be created from the language context menu, and the following dialog has a new checkbox you can use to make it standalone.

Concept and Interface conversion

Concept and Interface conversion

We’ve added a new intention that converts a concept to an interface concept and vice versa. This can be used when creating a language structure, and it does not change usages.

Create from usage

Create from usage

Now it's possible to create concepts, methods, and classes from usages in code. The intention can create a class on new statements, methods in expressions, as well as concepts and interfaces in child/reference roles and in extends/implements.

Generating valid java identifiers

Generating valid java identifiers from INamedConcepts

A new generator statement allows you to generate a valid Java identifier from any INamedConcept. This will create a unique name by removing illegal symbols, capitalizing, and adding a prefix if needed.

Find Usages: new statement to report arbitrary search result when writing a finder

In previous MPS versions, the add result statement on the finder only allowed for node<>-based search results. Now with add raw result, the language designer can display any result that the Find Usages view is capable of visualizing.

What’s Fixed

Generator: control the dynamic reference warning

The MPS generator issues a warning when it tries to resolve a dynamic reference but fails, and this causes a lot of warnings given the fact that not all generators adhere to a strict reference construction approach using label mappings. Therefore, we’ve added a new setting to control whether the warning appears.

Learn more

JavaStubs loading performance improved Client Sponsored

We have significantly improved performance when loading stub models, especially from large and strongly connected sets of jars. Loading times are now 2-3 times faster on our target project than they were in 2019.2 (from 18 seconds down to 6 seconds). This boost has also been backported to MPS 2019.1 and MPS 2019.2.

Build language: explicit model roots

MPS used to treat only a specific set of files as models, namely *.mps and *.mpsr, however, with custom model persistence the file names differ. To make sure that all the necessary model files get bundled when a module is built, there's an explicit model root declaration for a module in the build script that facilitates custom file name patterns.


The custom-persistence samples and documentation for the new build solution wizard have had an update. The generation-time errors in the Math sample and broken links on the documentation pages have been fixed. Several dialogs and tool windows have also been corrected.

Base Language

Binary and octal literals are now supported, and type parameters in Javadocs are handled correctly. Many other issues have been fixed as well.

Quick-fix to update module/model identity objects

MPS detects outdated names and provides a quick-fix to bring them up to date for objects from SModel Language.

Learn more

Module Facet story update

With the 'Tests' module facet, language designers now have complete freedom, and MPS no longer demands that the facet be present for the Language module.

Learn more

Surround with...

The Surround with… action is now available when multiple nodes are selected. Previously it was enabled only for selections containing a single node.

Show Affected Files action in Root History dialog

For a revision in a root history, you can now take a look at the other files changed in the same revision.

Root History for models in per-root persistence

The Show Root History action, which was introduced in 2019.2, has been available for roots from models kept in a single file. Now, models in per-root persistence are supported as well.

Update of Favorites view

MPS integrates the well-maintained IntelliJ Platform Favorites tool.

Learn more

Meta-languages styling

All meta-languages now offer the same style and editing experience with respect to, among other things, keyboard navigation, placeholder cell behavior in editors, and "New Root" appearance.