In this series I go through the commit logs and change logs of MPS and popular MPS libraries and collect notable changes from their master branches.

MPS

The list below only mentions user-visible changes and does not include refactorings such as dead-code removal or moving functionality around.

BaseLanguage

  • 🆕 IForEachLoop interface to capture commonalities between various foreach loops.
  • ↗️ Intention ‘Add Field For Unused Param’ got a slightly nicer name
  • ↗️ BaseLanguage no longer depends on the behavior language
  • ↗️ Resolution of unknown elements during Java parsing will not add a used language when it already comes from a used devkit.
  • 🐞 Fixed a few NPEs when accessing scope or class hierarchy for a detached node

Behavior language

  • ↗️ Generated code changes to improve diagnostics: parameter names are now tracked, no code is generated for empty constructors, and invoking some internal implementation methods directly to shorten stack traces.
  • ↗️ Removed the dependency of the behavior language on the kernel subsystem.

Core

  • ↗️ Diagnostics improvements (better printout from ClassLoaderManager, extra trace from EDTExecutor).
  • ↗️ Continued internal refactoring towards per-project repositories.

Editor

  • ↗️ The : cell was made non-selectable in Boolean style items.
  • ↗️ Avoid auto-fixing references in nodes that are no longer open in the editor.

Find Usages

  • ↗️ A nicer tab name for module dependency usages.

Make

  • ↗️ The RCP build script wizard was updated to reflect the fact that the MPS Make plugin now depends on the Java plugin.

Migrations

  • ↗️ Minor improvements in the migration notification (“Some languages in the project are not deployed…”)

MPS-extensions

  • 🆕 blutil language was extended with several additional operations, such as ’elvis’ operator ?:, integer ranges ([2..5]), select with index, and more. For more details, see the changelog.

  • 🆕 EditorTestLifecycleMethods attribute and related intentions were added to the nl.f1re.testing language. With these intentions you can add before/after tests methods to editor tests.

  • 🐞 de.itemis.mps.linenumbers Improve line numbers position in diff editors where the line numbers appear to the right of the editor.

  • 🐞 de.itemis.mps.linenumbers Fix a NullPointerException that would occur after application shutdown and would be logged e.g. by command line tools. The NPE was caused by failing to properly dispose a Swing timer.

  • 🐞 de.itemis.mps.editor.celllayout.runtime Grid layout was broken after previous performance optimization

mbeddr platform

Bugfixes to several languages:

  • 🐞 com.mbeddr.mpsutil.filepicker: Solution-relative pickers now work correctly during generation.
  • 🐞 com.mbeddr.mpsutil.hyperlink: random exceptions should no longer occur after module reload.
  • 🐞 com.mbeddr.mpsutil.interpreter: Throw a more detailed exception when TypedChildConstraint cannot determine the type of a node.
  • 🐞 com.mbeddr.mpsutil.interpreter: Generated node URLs now correctly point to the input model instead of the transient model.

KernelF

  • no changes in March

mbeddr/mps-gradle-plugin

  • 🐞 A minor fix to the MpsMigrate: pass an additional --add-open argument to MPS so that versions 2025.1 and above do not complain at run time.

mps-build-backends

  • 🐞 A few fixes to get fewer stack traces logged during backend execution.
  • 🆕 The execute backend can now exit with a custom error code: if the executed method returns an integer value, this value is used as the backend exit code.

Other projects

  • Eugen Schindler from DSLFoundry wrote in to mention that he recently migrated two DSLFoundry projects to MPS 2025.1: mps-UMLRT and mps-metabnf.

  • MetaBNF seems to be a catchy name because this is also the name of a new project open-sourced by Porsche. Both projects appear to be focused on generating MPS DSLs from a Backus-Naur Form (BNF) description.