MPS 2023.2 bietet Verbesserungen für die Generierung von BaseLanguage-Lambdas, Unterstützung für JUnit 5, überschreibbare Typsystem-Inferenzregeln und mehr.
Tests in MPS werden jetzt als JUnit-5-Tests generiert. Eine begrenzte Unterstützung für JUnit 4 ist weiterhin verfügbar.
BTestCase
NodeTestCase
EditorTestCase
MigrationTestCase
PatternTest
GeneratorTest
Ein neuer Ant-Task launchtests
unterstützt die folgenden Elemente:
bibliothek
Makro
Plugin
testmodules
Der Task unterstützt die Ausführung aller Testartefakte mit Ausnahme von JUnit 3 und dient als neues Ziel für die Testkonfiguration.
Mit dieser API können Sie die in MPS verfügbaren Testtypen erweitern und Listener für Testsitzungen implementieren.
Die MPS-Testplattform-API besteht aus Klassen in jetbrains.mps.baseLanguage.unitTest.platform
:
TestPlatform | Definiert die API für die MPS-Testplattform. |
TestDescriptor | Repräsentiert einen einzelnen Test auf der MPS-Testplattform. |
TestSource | Repräsentiert die Testquelle, z. B. einen SNode . |
TestSession | Repräsentiert eine Testsitzung. |
TestDiscoveryParticipant | Ermöglicht den Beitritt zum Testerkennungsprozess. |
TestSessionListener | Ermöglicht den Empfang von Benachrichtigungen aus der Testsitzung. |
JUnit 5 bietet unter anderem Unterstützung für Tests, die mit einer benutzerdefinierten Engine ausgeführt werden. Eine häufig verwendete Engine ist das eigenschaftsbasierte Testframework jqwik.
Wir haben vor kurzem die Möglichkeit hinzugefügt, Typsystemregeln, die für übergeordnete Konzepte definiert wurden, zu überschreiben. Möglich ist dies, wenn das Unterkonzept in einer Sprache definiert ist, die die Sprache des übergeordneten Konzepts erweitert. Die Funktion wird für Inference
-Regeln unterstützt.
In einem früheren Update erhielt MPS eine verbesserte Unterstützung für Methodenreferenzen und die Umwandlung von Closures in Java-Lambdas. Wir haben diese Unterstützung durch zahlreiche kleinere Ergänzungen und Bugfixes erweitert.
Closures, die in Collection-Operationen verwendet werden, werden jetzt als Java-Lambdas generiert. Dies war ursprünglich nur für reguläre Funktionsaufrufe verfügbar, die Java-Schnittstellen verwendeten. Um die Abwärtskompatibilität zu wahren, werden Closures in bestimmten Fällen weiterhin als anonyme Klasse generiert:
Dies führt im Allgemeinen zu einer höheren Qualität des generierten Codes, denn Lambdas sind nicht nur leichter lesbar, sondern weisen auch eine geringere Fehlerwahrscheinlichkeit bei der Generierung auf. Andererseits erlaubt MPS Features mit Raw-Typen, die in Java nicht zulässig wären, da die Erkennung solcher Fälle immer noch schwierig ist. Bei der Verwendung von Raw-Typen kann daher die Generierung fehlschlagen.
Closure-Parameter konnten früher verschiedene Formen annehmen: ~param
, <type> param
, param
und var param
. Das Hinzufügen von Parametern ohne Typangabe war umständlich. In dieser Version haben wir die Form ~param
als veraltet gekennzeichnet, zugunsten des einfachen typenlosen Parameters, der nun standardmäßig eingefügt wird. Wenn außerdem eine Closure in einen Funktionsaufruf eingefügt wird, werden Standardparameter vom erwarteten Funktionstyp eingefügt. Und wenn ihr Typ im Quellcode weggelassen wird, werden die generierten Parameter nun ohne Typ angegeben, wodurch die Kompilierungsqualität weiter verbessert wird.
In MPS werden vornehmlich Sequenzen verwendet, aber es gibt auch Fälle, in denen Java-Streams benötigt werden. In diesem Update wurde die Typinferenz verbessert, um Typsystem-Probleme im Zusammenhang mit komplexen Methoden, die die Stream-API verwenden kann, zu vermeiden. Wir haben zwei Operationen hinzugefügt, um zwischen Streams und Sequenzen zu konvertieren:
<stream>.asSequence
konvertiert eine Sequenz in einen Stream.<sequence>.toStream(parallel=...)
bewirkt das Gegenteil.So können Sie nicht nur auswählen, welche API verwendet werden soll, sondern auch die Vorteile von Sequenzen (Wiederholbarkeit) mit denen von Streams (verschiedene Kollektoren, mehr Operatoren) kombinieren.
Der Diamant-Operator (new ArrayList<>()
) für BaseLanguage
-Konstruktoren wurde bereits früher eingeführt, aber die Erstellung von Collections war von dieser Verbesserung ausgeschlossen. Ab diesem Update können Sie die Typparameter bei neuen Collections weglassen und so einfacheren Code schreiben:
var myList = new arraylist<> {myInitialValue}
map<int, string> myMap = new hashmap<>
Darüber hinaus haben wir die Unterstützung von Varianz in Collections verbessert. Zum Beispiel ist es nicht mehr möglich, die Notation ? extends Number
zuzuweisen. Das Typsystem hingegen bemängelt nicht mehr die Verwendung solcher begrenzter Typen, wenn sie gültig sind. Der Typ sequence<>
bleibt standardmäßig kovariant, denn dies hat keine unsicheren Konsequenzen, da Sie ihn nicht in eine Sequenz von Elementen einfügen können, die nicht mit seinem Typ übereinstimmen. Dies kann zu neuen Problemen bei der Typprüfung in Fällen führen, in denen unsicherer Code zuvor unerkannt blieb. Diese können entweder mit begrenzten Typen – list<? extends node<>>
– oder mit Sequenztypen – sequence<node<>>
– gelöst werden.
Wir haben eine neue Option Disable Make On Startup unter Settings | Project Settings | Make hinzugefügt. Wenn diese Option aktiviert ist, führt MPS beim Start nicht make für alle Module des Projekts aus. Dadurch können Sie die Startzeit verkürzen, wenn der Make-Prozess zu lange dauert oder mit hoher Wahrscheinlichkeit fehlschlägt, da für eine erfolgreiche Ausführung eine manuelle Konfiguration benötigt wird.
Auf dem Java-Tab des Moduleigenschaften-Dialogs wurde eine neue Option Edit hinzugefügt. Sie ist sehr praktisch, wenn auch nicht ganz einfach zu finden. Wenn Sie die Zusammensetzung der Jar-Bibliotheken Ihres Moduls ändern müssen, verwenden Sie einfach diese neue Option, um die Einträge nicht mühsam einzeln entfernen und hinzufügen zu müssen.
Durch die Erweiterung des Konzepts IGenericComment
können Konzepte, die Kommentare in benutzerdefinierten Sprachen darstellen, die TODO-Funktionalität von MPS nutzen. TODO-Kommentare werden vom TODO Finder gesammelt, im TODO Viewer aufgelistet und beim Commit-Prozess geprüft.
Bei der Erstellung von Instanzen in einem Aspektmodell hat MPS bisher eine allgemeine Logik befolgt, die rootfähige, nicht-abstrakte Konzepte verwendete, die nach Namen oder Flags geordnet waren. Bei einer Deklaration eines Aspekts können jetzt optionale Konfigurationseinstellungen angegeben werden, sodass Sprachdesigner steuern können, welche Konzepte den Benutzer*innen präsentiert und wie sie gruppiert und geordnet werden.
Diese verwirrende Warnung wurde früher angezeigt, wenn in einem ClassConcept
ein ClassConcept
aus einem anderen Modul erweitert oder anderweitig zugänglich gemacht wurde. Vor Version 2023.2 verließ sich MPS beim Anlegen des Abhängigkeitsdiagramms auf die in den Moduldeskriptoren angegebenen Modulabhängigkeiten. Da MPS die Abhängigkeitsinformationen jetzt auf Grundlage der tatsächlichen Generatoren und Sprachen erstellt, die an der Transformation eines Modells beteiligt sind, müssen Sie diese Abhängigkeiten nicht mehr explizit angeben, sodass die Prüfung nicht mehr erforderlich ist.
Teilen ist in jeder Gemeinschaft sinnvoll. Die folgenden Funktionen wurden auf Anfrage und mit finanzieller Unterstützung von Unternehmen entwickelt, die MPS kommerziell einsetzen. Jetzt stehen diese nützlichen Erweiterungen auch Ihnen zur Verfügung.
Durch die effektive Nutzung paralleler Hardware kann der Prozess der Modellprüfung jetzt beschleunigt werden. Je nach den Einstellungen in Settings | Tools | Model Checker können beim Starten des Prozesses mehrere Threads erzeugt werden.
Die Methode FilePerRootDataSource.getStreamByName()
wurde optimiert, um die Leistung beim Laden von Modelldaten zu verbessern. Wenn Sie größere Modelle mittels File-per-Root-Persistenz speichern, wird diese Änderung die Leistung spürbar verbessern.
Die Aktion Find text in project wurde verbessert. Sie sucht jetzt auch nach Verweisen auf benannte Knoten und liefert so zusätzliche relevante Ergebnisse. In einem neuen Vorschaubereich können Sie sich die Ergebnisse direkt im Suchdialog ansehen. Text mit HTML-Inhalten wird jetzt in den Ergebnissen in reiner Textform und nicht wie in früheren Versionen als HTML dargestellt.
Bei der Migration eines Projekts mit von MPS bereitgestellten Ant-Tasks kann es vorkommen, dass Abhängigkeiten nicht korrekt migriert werden. Wir haben ein Flag hinzugefügt, um die Migration des Projekts auch in solchen Fällen fortzusetzen. Standardmäßig wird jedoch der Migrationsprozess weiterhin angehalten, sobald eine nicht migrierte Abhängigkeit erkannt wird. Um dieses Flag zu verwenden, fügen Sie haltOnDependencyError="false"
zum Ant-Task migrate
hinzu.
Ab v2023.2 können Sie in die IDE hinein- und herauszoomen und dabei alle Bedienelemente gleichzeitig verkleinern oder vergrößern. Wählen Sie dazu im Hauptmenü View | Appearance und passen Sie die IDE-Skalierung nach Wunsch an. Außerdem können Sie unter Settings/Preferences | Keymap | Main Menu | View | Appearance benutzerdefinierte Tastenkürzel für diese Aktionen festlegen.
In MPS 2023.2 haben wir eine neue Layout-Option eingeführt, mit der Sie die Breite der seitlichen Toolfenster vereinheitlichen oder aber ihre Größe individuell anpassen können. Das neue Kontrollkästchen Remember size for each tool window finden Sie unter Settings/Preferences | Appearance & Behavior | Appearance | Tool Windows. Dieser Blogartikel bietet detailliertere Informationen über die Funktionsweise dieser Einstellung in der neuen und der alten Bedienoberfläche.
Dank der neuen Syntaxeinfärbung der Codebeispiele in Settings / Preferences | Editor | Inspections lässt sich jetzt einfacher nachvollziehen, was eine Inspektion auslöst und ob sie lieber aktiviert oder deaktiviert werden soll.
Mit der Editoraktion Fill Paragraph können Sie jetzt in Markdown-Dateien lange Texte in gleichmäßige Zeilen umbrechen. Setzen Sie dazu die Einfügemarke auf den entsprechenden Absatz und suchen Sie mit Find Action (Strg+Umschalt+A) nach dem Befehl Fill Paragraph.
Wir haben die Bedienfreundlichkeit des Popup-Fensters Branches verbessert. So ist zum Beispiel die Navigation zwischen den Branches jetzt einfacher, da sie in erweiterbaren Listen gruppiert sind.
MPS 2023.2 unterstützt Sie durch Auto-Completion im Popup Create New BranchBranch. Sobald Sie mit der Eingabe eines Namens für Ihren neuen Branch beginnen, schlägt die IDE anhand der lokalen Branchnamen relevante Präfixe vor.
Für jede Hauptversion bieten wir eine Anleitung für die Migration von älteren MPS-Versionen, um einen reibungslosen Umstieg zu gewährleisten. Bitte lesen Sie diese sorgfältig durch.