What's New in MPS 2019.1


Client Sponsored

Custom style and priority of completion items

Language designers can set the style and priority for the items in the completion menu. It’s possible to change the background and text color, bold and italic formatting, and it’s even possible to hide items. Note this feature is experimental and its design may undergo changes in the future. Learn more about it.

Generator Language

Support for automatic type inference introduced for new VAR macro

VAR macro now supports multiple variable declarations per macro in the Generator language. The type is deduced from the declaration query unless it is overridden.

Plugins support

Client Sponsored

Use MPS plugins from the migration ant task

Now, if a plugin is needed for a project to migrate, this can be specified in the <migrate> ant task. The corresponding plugin will be enabled, together with its dependencies. We’ve also integrated this feature into 2018.3.5 following a client support request.

Client Sponsored

Plugin deploy support in the "run code from solution" build script instruction

The "run code from solution" instruction allows you to enable plugins in the MPS instance that will run the code. The dependencies of the plugin will be included. This feature was also integrated into 2018.3.5 following a client support request.

IDE Improvements

Create a custom UI theme

Add a touch of color to your day! The IntelliJ Platform has just introduced this cool feature, and since MPS is based on it, now you can customize the UI themes for your IDE too.

Import the new predefined themes as plugins or create your own from scratch with IntelliJ IDEA. Try our new Cyan Light Theme and Dark Purple theme.

JUnit run configuration now accepts plugins to deploy

Similar to an MPS Instance run configuration, now you are able to provide a list of IntelliJ IDEA plugins to be deployed on test execution. The ‘before launch’ task, ‘Assemble Plugins’, is available in JUnit run configuration as well. It automatically builds the plugins being deployed and copies the artifacts to the settings directory.

Client Sponsored

Sorting in the ProjectPane

We've added TreeNodeSortService to manage ChildComparatorProvider contributions which gives you full control over the MPSTreeNode children in the ProjectPane tree. Users will now register/unregister providers from their plugin’s application or project parts.

Indication of incoming and outgoing commits

The IDE now indicates if the incoming and outgoing commits are available for individual branches in the Branches popup. Simply enable the new ‘Mark Branches that have incoming/outgoing commits in the Branches popup’ option in Preferences/Settings | Version Control | Git.


Static Methods in baseLanguage Interfaces

MPS now allows you to create static methods in interfaces.


Goodbye Confluence, hello Help Center!

Since forever, Confluence has been the home of the MPS documentation. Now it’s time to grow up and move out to our own place. We are migrating all the documentation to our Help Center; the User guide and Fast Track Tutorial are already accessible there. Expect more documentation improvements in future releases.

Stub methods signature

The return type of the method was removed from the MPS node IDs created in Java stub models. From now on, the true method signature defined by the Java language specification is used to identify methods. You don’t have to resave all models, referencing a method from sub model, if the return type was changed in a new version of the library. Automatic migration will resave all MPS models and correct all existing references to stub model methods.

New meaning for the 'Compile in MPS' checkbox

If the 'Compile in MPS' checkbox in module properties is not selected, this no longer implies there's a connected IntelliJ IDEA instance to perform code compilation. The checkbox can be understood as "either compile in MPS or do not compile at all". .

MPS shows aggregated languages automatically

Structure aspects now manifest the languages they incorporate by aggregation (i.e. using a foreign concept in a child role). It’s no longer necessary to import such languages explicitly into a model that uses an aggregated language will be automatically used while editing.