The Feature Freeze for 2019.2 is available

The last early access for the 2019.2 comes with new features. For this version, you can expect new error messaging customization, VCS history of changes to a specific root, a new way to run typechecking queries, and the important announcement that MPS 2019.2 will run in JDK 11. 



Customization of error messages

For some time, there were requests for the possibility to customize some MPS error messages. Thanks to a request from one of our paying clients, we were able to give the highest priority state to this feature. All constraint checker error messages can be customised now.

We are planning to make this reporting customization available for other kinds of errors in for the next releases.

New language aspect named ‘feedback’ was added in this version. This aspect can be used for customising the text of error messages reported by structure validation, property and scoping constraints.


The feedback ‘ShowMessage’ defines the text displayed in the tooltip when you move the mouse cursor over the problem node.


Note that you can define your own custom feedback by extending the given set of feedback languages, for instance, you might describe feedback which highlights the edges or vertices in the diagram editor.


Rules constraints language

Rules constraints language was created in order to replace currently available canBe* constraint from the regular MPS constraints language in the future. We consider Rules constraints language as experimental functionality, so we expect it to evolve significantly in next releases.


For now, we keep precedence of old-style constraints, so old canBe* constraints should be completely removed in order to let rule-base constraints step in. New constraints definition language is more declarative, it forces the language designer to specify a set of isolated constraints instead of the single conditional block and it allows to customise error messages for each constraint separately.




Root History

The Git menu comes with a new action to show the history of VCS changes to a specific root. The action is available from the editor’s context menu:


Note, collecting root history, as with almost any other VCS history action, is time-consuming. There’s a progress indicator in status bar that helps you bear with this.

The dialog is similar to Selection History dialog of IntelliJ IDEA:


A list of revisions in the dialog shows revisions of a model file when the respective root has been changed.


Typechecking Facade API

As of this release, the new facade API is the only supported way to run typechecking queries. 

New API: See jetbrains.mps.typechecking.TypecheckingFacade and related classes.

Deprecated API (legacy): The hierarchy of the packages jetbrains.mps.typesystem.* is now deprecated. Any direct usage of classes within this hierarchy is discouraged, except for code that is automatically generated from the contents of a “typesystem” aspect. 


Java 11 as runtime

MPS will now run under JDK 11. This will affect the mechanism of loading stub models. Most of the project won’t need migration, but be aware that it’s possible that some JDK classes and fields will be moved with the new version. 

In Idea plugin, the modules with MPS facet should now have at least JDK 11. Otherwise, it will not generate.


Not only that, we have solved a large number of other minor and not so minor issues, see the complete list here. Use our issue tracker to report any problems that you find.


Have a nice day!

Your JetBrains MPS Team

The Drive to Develop

MPS 2018.1

Posted in Uncategorized | Leave a comment

The third Early Access Program for MPS 2019.2 is waiting for you

The MPS 2019.2 EAP3 comes with new functionality and gives shape to the final release.




Enumeration data type

New declarations provide a concise way to declare a list of options: each option is expressed with a named enumeration member. Optionally, you can alter the editor’s presentation for some members and choose the default member that is used when no member is explicitly set in a property.

image2019-7-16 19_3_14

The SModel language has also refined the experience of working with enum properties. Now property reads and writes work with typed enum-member instances instead of raw primitive values, which helps language designers write code with fewer errors.


Additionally, we reworked all operations that work with enums.


SModel also ships a statement for switching on enum members. It also can be used as an expression to evaluate different values depending on what enum member is met.


Local git configuration

We’ve changed merge driver settings from global to local (per git repository), so now it is possible to have as many merge drivers as MPS installations.


Specific error checking

One of the common use cases of test language is checking some node for error messages or warnings. The testing subsystem of MPS sometimes could not distinguish different errors appearing on the same node. This could lead to misleading behavior: even if user specifies expected error inside corresponding test annotation, any additional errors and warnings reported upon this node would not be reported as test violations.

Keep in mind that migrating to the new version might cause some tests to fail because now they are only suppressing the warnings and errors that the user specified in the error checking annotation.


Checking rules defined for patterns

When you define a checking rule for a concept, the rule is then called for every node that is an instance of the concept.

Now, instead of overriding any rule inherited from the superconcept, you can explicitly specify the list of rules you want to override. We strongly recommend that you review all your checking rules that use the overrides feature, and determine which rules should be overridden.

Previously, there was an option to define the checking rule for a concept using a pattern language. This option could be used for narrowing the rule applicability condition (compared with rules defined purely for a concept), and for convenient naming of properties, children, grandchildren, and so on. Both goals can be achieved by using a pattern language inside the rule body, in particular, by using the matches statement on top of its do block:


Checking rules with patterns in their body will no longer be supported in the future, so we recommend that you review them and move the pattern into the rule body using the dedicated intention.


Not only that, this EAP build fixes several annoying bugs reported by our community.


Have a nice day!

Your JetBrains MPS Team

The Drive to Develop
MPS 2018.1

Posted in Announcement | Tagged , , | Leave a comment

MPS 2019.1.5 is now available to download

This minor release comes with critical fixes for light quotations that are used with final variables, some problems with the MPS extensions, and issues reported by the community. See the complete list of fixed issues and please keep reporting them to our issue tracker.


Have a nice day!

Your JetBrains MPS Team

The Drive to Develop

MPS 2018.1

Posted in Announcement | Tagged , , | Leave a comment

MPS 2019.1.4 bug fix is ready

This release comes with some critical fixes that we have recently come across. Here are the main issues fixed:

  • The MPS instance run configuration is no longer broken. (MPS-30344)
  • Fixed the problems with updating or removing project libraries. (MPS-30013 and MPS-29673)
  • Clone model with @genplan is now working again. (MPS-30349)


See the complete list of fixed issues and please keep reporting them to our issue tracker.

Have a nice day!

Your JetBrains MPS Team

The Drive to Develop

MPS 2018.1

Posted in Announcement | Tagged , , | Leave a comment

MPS 2019.1.3 is waiting for you.

This minor release comes with a few critical fixes that the community reported. You can see the complete list of bugs fixed here. Keep using our issue tracker to report any problem.



Have a nice day!

Your JetBrains MPS Team

The Drive to Develop

MPS 2018.1

Posted in Announcement | Tagged , | Leave a comment

First Early Access Program of 2019.2

We have been working hard to bring you more exciting features and solve painful bugs. This release comes with a whole load of new improvements. Here are the main ones:

  • Full-text search in property values is ready. Edit–>Find–>Find Text in Project action (Ctrl-Shift-F) lets you look up nodes with property values matching the specified text. (MPS-4577)
  • Make processes in Backgrounds work properly. We have been working to improve UI responsiveness during the background make. If you want it to restore the previous version, there’s a new UI setting to control all this, Preferences–>Project Settings–>Perform in background. (MPS-13440)

  • BaseLanguage improvements were one of the main goals for this release. We fixed more than 10 issues related to BaseLanguages from bugs all the way to usability problems.
  • We have spellcheck for single-line comments, Javadoc text, and string literals. (MPS-8630)
  • Based on feedback from the community, we have added a new sample project for XML generation. (MPS-30110)




Apart from all of that, we have solved a bunch of issues, you can see the complete list here. Let us know if you find any other problems on our issue tracker.


Have a nice day!

Your JetBrains MPS Team

The Drive to Develop
MPS 2018.1

Posted in Announcement | Tagged , , | Leave a comment

MPS 2019.1.2 is ready for you!

Try the new bugfix update for MPS 2019.1 and forget all about the following issues:

  • No more skipped tests. (MPS-29697)
  • MPS Instance and Deploy Plugins run configurations work as expected. (MPS-30093)
  • Names don’t collide while running tests. (MPS-29593)
  • Custom packaging is fully deprecated. (MPS-30113)




See the complete list of issues fixed here. If you run into any problems, tell us about them in the tracker.


Have a nice day!

Your JetBrains MPS Team

The Drive to Develop


MPS 2018.1

Posted in Announcement | Tagged , | Leave a comment

The first bugfix of 2019.1 is here! Time for an update!

For this bugfix, we solved a bunch of issues that we have been fighting with for some time. The main fixes we made were:

  • Runtime Solution with a .JAR as a model root causes build script to fail. Fixed. (MPS-30053)
  • Move model doesn’t add dependencies. Fixed. (MPS-25519)
  • Find usages of java stub method not working. Fixed. (MPS-30038)
  • Instances are not available in completion after move concept refactoring. Fixed. (MPS-27494)
  • Move node refactoring problem. Fixed. (MPS-18166)




You can see the complete list of fixed bugs here. Keep reporting the issues you find to our tracker.


Have a nice day!

Your JetBrains MPS Team

The Drive to Develop

MPS 2018.1

Posted in Announcement | Tagged , | Leave a comment

JetBrains MPS 2019.1: Custom Style for Completion Menu, Static methods in BaseLanguage, Custom UI themes, and more.

Our first release of the year is here! With MPS 2019.1, we haven’t focused on any specific subsystem in particular, but rather on multiple parts of the product that came from the needs of our clients and community. Some of the features were made possible by customers who tasked us with implementing them for their own specific needs; for more information about how we work with customers, please see our Service page.



Custom style and priority of completion items (Client Sponsored)

Language designers can set the style and priority for the items in the completion menu.

In order to do so, the language designer should create a Completion Styling root in the editor aspect of the language and stylers – statements that define the type of style.

To specify the style of a completion menu item, the language designer should first specify the item.

We currently provide two possible selectors of the completion items:

1) Items which modify instances of a specific concept. This selector selects items which appear in the completion menu when the user puts the caret on the node of the concept (or its properties, references, or children) and presses Ctrl+Space.

2) Items which create instances of a specific concept. These are mainly substituted actions. For example, when a user selects the ReturnStatement which is in the StatementList and presses Ctrl+Space, items in the completion menu items create instances of the Statement and replaces the ReturnStatement with these instances. So the selector for actions creating instances of a Statement will select these items.

It is important that one item can be selected by many selectors, for example, in the situation above there are several selectors which will match one completion item:

1) For actions creating instances of a Statement (because the item will replace the current node with another Statement)

2) For actions modifying instances of a Statement  (because the current node is a ReturnStatement which is also a Statement)

3)  For actions modifying instances of StatementList:statement (because the item will paste a new node into the statement role of the parent StatementList)

So you should put a preference on the most specific selector possible.

For example selector of actions modifying instances of BaseConcept is the least specific selector and will affect all the completion menu items

Once the selector matches the menu item, the language designer can customize its style. There is a style object for that.

It is currently possible to:

  • Make an item’s font bold
  • Make an item’s font italic
  • Strikeout an item’s text (useful for deprecating concepts)
  • Set an items’ background and text color
  • Hide an item
  • Set an item’s priority
  • Update an item’s description text

Note that all the styles accumulate: if at least one styler is set as bold/italic/hide, the item will also be bold/italic/hidden. If the background or text colors conflict, the one set first will be used.

The priorities are used to sort the items, the higher-priority items are used by the stylers.

Items are sorted by priorities first and then by the level of matching to the user’s text. Currently, there is no way to override this level.

There are several parameters that a language designer can use, and they are all stored in the itemInformation parameter:

  • matchingText – the text which appears on the left of the item. This text is used to filter the items when a user types their text in the completion menu.
  • descriptionText – the text which appears on the right of the item.
  • parameterObject – some of the items are parameterized with this object. For example, items which change the node’s reference are parameterized with the target of the reference which they will set when they are executed.
  • outputConcept – some actions, like substitute actions, create new nodes, the output concept is the concept of the new node.

The most notable examples of stylers in the baseLanguage are:

1) LastReturnStatementStyling which makes the return item bold and sets its priority to non-zero if it is last in the current statement list.

2) VariableReferencePriority which sets an item’s priority to non-zero if the item references the variable declaration.


This feature is experimental and its design may undergo big changes in the future. Your feedback regarding this feature will be very appreciated and will really help us to improve it.

If you want to turn the feature off, use  Settings>Editor>General>Use completion styling.

Screen Shot 2019-03-25 at 17.14.49

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

Use MPS plugins from the migration ant task (Client Sponsored)

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.AntMigration_Misa

Plugin deploy support in the “run code from solution” build script instruction (Client Sponsored)

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 your 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.


Sorting in ProjectPane (Client Sponsored)

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

An 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.

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.

Screenshot from 2019-03-22 19-23-28


Static Methods in baseLanguage Interfaces

MPS now allows you to create static methods in interfaces. 

Screen Shot 2019-01-30 at 16.08.39


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.


We have also fixed a long list of bugs to make the product stable. It’s always good to hear from you, so feel free to report issues or feedback on our tracker.


Have a nice day!

Your JetBrains MPS Team

The Drive to Develop

MPS 2018.1

Posted in Announcement, Uncategorized | Tagged , , | 1 Comment

Handle deprecated code in your project

Deprecated code smells like rat. It is not a good sign to be using deprecated code in a projects for several versions. Here are a few tips that show how MPS can help you get rid of deprecated code.

The handy migrations

The Migration menu contains a Deprecated Code submenu with three migrations.

The action Find Usages of Deprecated is undoubtedly the most useful one if you want to eliminate usages of deprecated code. It will find all usages of deprecated elements in your project. The report of the found usages can, as one of the options, group the entries by the expected version of code removal, so it’s easier to recognize their severity and prioritize which to eliminate first.

UI:UX_New Actions to find deprecated code_3

The Find Deprecated Code in Project migration will find all deprecated elements so that you can revisit them and perhaps add some helpful description to help the users migrate away from them.


The Find Deprecated Code with No Usages migration can report all deprecated elements that are no longer used by the project.


Equipped with these tools, you can now look forward to the next week, when MPS 2019.1 is going to be released. They can make you migration path more smooth and enjoyable.

Posted in Feature | Tagged , , | Leave a comment