What's New in MPS 2018.2

Generator Tests

In addition to the existing family of node and editor tests, we’ve implemented a new way to test generators. The aim is to ensure a generator, or set of generators, do their job. Both in-process and out-of-process execution modes are supported from the IDE, as well as execution from MPS Ant build scripts.

Fork in generation plans

There’s a new statement in generation plans: fork with another generation plan to branch the transformation sequence at a given point. The referenced plan receives a model in the state it was at in the fork step and proceeds as a regular transformation. In the example, first, we transform the input model with crossmodel.entity generator and records the state, and then continues on with the crossmodel.property#prop2class generator to eventually get output model #1. Then the crossmodel.property#prop2xml generator transforms the recorded model to get the output model #2. Note that ‘then’ here is not a contract – there’s no promise that branches get processed in any specific order, except that the ‘primary’ branch, the one from the initial plan, gives the ‘first and only’ output model available through old API (GenerationStatus#getOutputModel) for compatibility/migration purposes.

Fork in generation tests

Generator tests support generation plans with a fork statement and match all output models against the reference ones which were supplied.

New VCS aspect

We have introduced a new VCS language aspect. Instead of writing annotations on the concept declaration, now you create a language aspect for this. The aspect is generated to specific runtime code. The VCS aspect has replaced the MergeHints annotation, and migration is included.

GitHub plugin

The GitHub plugin is now implemented. You can log in from VCS -> Checkout from Version Control -> Git -> Log in to GitHub...

Migration notifications

We've implemented migration notifications to provide you with better communication on what is happening: now you will receive a notification if a project depends on a language that could not be loaded for whatever reason, or when migration is postponed.