Das ist neu in MPS 2022.2

MPS 2022.2 bietet Annotationen im Inspector, Verbesserungen bei der Kotlin-Unterstützung, eine erweiterte SModel-API und vieles mehr.

Annotationen im Inspector

Annotationen im Inspector

Annotationen sind jetzt im Inspector-Fenster zugänglich, und der Annotationsvorgang wird für den gesamten Root gestartet. Klicken Sie mit der rechten Maustaste auf den linken Rand des Inspector-Fensters, um diese Aktion aufzurufen. Die Annotation wird sowohl im Inspector-Editor als auch im Haupteditor geöffnet.

Weitere Informationen

Verbesserte Unterstützung in MPS Kotlin

Verbesserte Unterstützung in MPS Kotlin

Zahlreiche Editorprobleme wurden behoben, um die Texteingabe zu verbessern, zum Beispiel:

  • Scopes wurden refaktoriert, um mehr Anwendungsfälle zu unterstützen (z. B. benutzerdefinierte Receiver-Typen) und das Filtern zu verbessern (weniger Duplikate, Zugriff auf verborgene Funktionen).
  • Unterstützung für Dekonstruktionsoperatoren durch das Typsystem.
  • Zahlenliterale: Einfacheres Einfügen von Float- und Long-Zahlen und Übergang zwischen vorzeichenlosen und vorzeichenbehafteten Zahlen.
  • Zeichenfolgenliterale: Durch Drücken von Enter auf einem Zeichenfolgenliteral kann zwischen ein- und mehrzeiligen Zeichenfolgen umgeschaltet werden. Außerdem wurden einige Einfügeprobleme behoben.
  • Kotlin-Stubs unterstützen das Laden von Annotationen und Funktionstypen mit Receivern (z. B. T.() -> R, was bisher fälschlicherweise als (T) -> R geladen wurde).
  • Lambda-Literale:
    • Unterstützung für impliziten it-Parameter.
    • Lambdas, deren Typ einen Receiver hat (z. B. Receiver.() -> Unit), verwenden diesen Receivertyp korrekt als implizites this im Lambda-Körper.

Weitere Informationen

SModel-Sprache für MPS Kotlin

SModel-Sprache für MPS Kotlin

SModel-Unterstützung ist jetzt dank der neuen Sprache jetbrains.mps.kotlin.smodel in MPS Kotlin verfügbar. Neben der verbesserten Kompilierungsunterstützung ermöglicht dies die Verwendung von Kotlin-Code in Sprachmodulen (z. B. als Hilfsklassen).

Zusätzlich zu den regulären Typen (Nodes, Concepts, Links und References) wird die erhöhte Flexibilität von MPS Kotlin genutzt, um Concept-Parameter einzuführen. Funktionen, Variablen und Klassen können jetzt solche Parameter deklarieren und verwenden und sie in ihren internen Typen wiederverwenden. Dies ermöglicht eine einfachere Typisierung und profitiert von den Smart-Casts von Kotlin.

Kotlin-Kompilierungsupdates

Kotlin-Kompilierungsupdates

Die Unterstützung der Kotlin-Kompilierung wurde durch eine bessere Persistenz verbessert. So werden Kotlin-Klassen nicht mehr gelöscht, wenn MPS neu gestartet wird.

In Buildskripten wurde eine neue Option hinzugefügt, um ein Modul für das Kompilieren mit dem Kotlin-Compiler vorzumerken. Das Setzen dieses Flags erfolgt derzeit manuell – es gibt keine automatische Prüfung, um es auf true zu setzen. Das Flag sollte gesetzt werden, wenn ein Modul, das Kotlin-Dateien enthält, für die JVM kompiliert werden soll.

Textstile in BaseLanguage-Kommentaren

Textstile in BaseLanguage-Kommentaren

Ihre BaseLanguage-Kommentare können Sie jetzt mit einem Textstil formatieren. In den Kommentaren werden die Stile Fett (Strg + B), Nicht-Kursiv (Strg + I), Unterstrichen (Strg + U) und Fett-Nicht-Kursiv (Strg + B -> Strg + I) unterstützt.

Postfix-Transformationen

Postfix-Transformationen

In der BaseLanguage können Sie jetzt Postfix-Transformationen durchführen, mit denen Sie den Code umwandeln können, indem Sie einen Text an den eingegebenen Ausdruck anfügen. Dies spart Ihnen Zeit, da Sie die Einfügemarke nicht an den Anfang des Ausdrucks bewegen oder den Ausdruck auswählen müssen, um die Transformation anzuwenden.

Träge Modellerfassung mit SModel

Früher hat MPS Modelle in dem Moment erfasst, in dem sie in einem Repository registriert wurden. Das Erfassen eines Modells in einem regulären Projektmodul ging damit einher, dass das Dateisystem durchforstet wurde, um Dateien und ihre Typen zu finden und zumindest die Header-Informationen über das Modell zu analysieren.

Die Module führen jetzt die Modellerfassung erst durch, wenn Modelle angefordert werden. Eine neue SModule-API (SModule.forEachRegisteredModel()) ermöglicht den ausschließlichen Zugriff auf Modelle, die einem Modul bereits bekannt sind, ohne eine Modellerfassung oder ein Laden von Modellen auszulösen. Wenn Sie SModel-API-Clients verwenden, insbesondere Unterklassen von SRepositoryContentAdapter, empfiehlt es sich, die neue API zu übernehmen, um von den Verbesserungen zu profitieren.

Verbesserte Association-Links (auch als SReference bekannt)

MPS verfügt jetzt über eine einheitliche API zur Erstellung von Referenzen sowie eine überarbeitete interne Darstellung. Diese Änderungen sollen das für eine spätere Veröffentlichung vorgesehene Modellreferenz-/Persistenzsystem verbessern. Bereits jetzt können Sie jedoch mit dieser Änderung den Arbeitsspeicherbedarf jedes Modells um etwa 5% reduzieren.

Java-Stubs

MPS berücksichtigt jetzt versionierte jar-Einträge und stellt Java-Klassen mit einer Version bereit, die der tatsächlichen Java-Runtime entspricht.

Migration von Log4j zu Java Util Logging (JUL)

Obwohl MPS und die IntelliJ-Plattform eine abgespeckte Version der Log4j-Bibliothek ohne bekannte Sicherheitsprobleme verwendeten, wurde bei beiden die Protokollierung auf das Standardpaket java.util.logging umgestellt. Es wurde eine Kompatibilitätsschicht implementiert (basierend auf SLF4J), um Aufrufe der Log4j-API an eine JUL-Implementierung umzuleiten.

Mit der Aktion Debug Log Settings können Sie DEBUG- und TRACE-Stufen nach Kategorien konfigurieren. Darüber hinaus gibt es jetzt eine bin/log.properties-Konfigurationsdatei, die das bekannte JUL-Konfigurationsformat verwendet. Im Gegensatz zur Datei log.xml in den Vorgängerversionen wird diese Konfigurationsdatei nicht standardmäßig eingelesen, aber Sie können über die Systemeigenschaft idea.log.config.properties.file den Zugriff auf diese (oder eine beliebige andere externe) Konfiguration anfordern.

Befehlszeilen-Make

Ant-Buildskripte, die MPS aus lang.build-Deklarationen generiert, verwenden separate Tasks zur Generierung und Kompilierung von Quelldateien (das MPS-eigene <generate> und das Ant-übliche <javac>). Es gibt jetzt einen neuen Task <mps.make>, der dem aus der IDE gestarteten Make-Prozess entspricht. Dieser ist für die vollständige Überführung eines Modells in kompilierten Code zuständig. Der Task kombiniert sowohl die Codegenerierung als auch die Kompilierung, was Zeit spart, da MPS ohnehin kompilierte Klassen für das Laden der Klassen in einem Modul benötigt (und <javac>-Tasks führen Kompilierungen, die bereits in <generate> stattgefunden haben, oft erneut durch). Außerdem nähern sich dadurch der Ant-Buildvorgang über die Befehlszeile und der aus der IDE angestoßene Make-Prozess einander an, was die Zuverlässigkeit Ihres Buildprozesses erhöht.

Weitere Informationen

Generator-Tests

Die Generator-Tests wurden durch Übereinstimmungsoptionen verbessert, die es erlauben, die Reihenfolge der Knoten zu ignorieren. Es gibt auch eine neue Aktion zum Neuordnen von Modell-Roots, die dabei hilft, Referenztestmodelle in den gewünschten Zustand zu versetzen.

Weitere Informationen

Timeout-Einstellung für TextGen

MPS begrenzt die Zeit für die Modell-zu-Text-Umwandlung (M2T) im Hinblick auf mögliche Fehler in TextGen-Aspekten. Das Limit war bisher fest vorgegeben. In letzter Zeit haben jedoch einige große Modelle das Limit erreicht und eine ungewollte Zeitüberschreitung verursacht. Daher können Sie jetzt mit einer IDE-Einstellung das Zeitlimit steuern. Die Unterstützung von Befehlszeilen-Builds ist für ein zukünftiges Release geplant.

Verbessertes Java-BaseLanguage-Abhängigkeitsmanagement für Make-Prozess

MPS hinterlegte Abhängigkeiten zwischen generierten BaseLanguage-Klassen in der Datei „dependencies“. Der Java-Compiler verwendet diese, um herauszufinden, ob abhängige Kompilierungsklassen eine Aktualisierung benötigen. Aber nachdem „dependencies“ in 2021.2 geändert wurde, um Abhängigkeiten auf höherer Ebene zu speichern, bestand keine Notwendigkeit mehr, Klassennamen pro Root zu sammeln und zu speichern. Dadurch verkürzt MPS die TextGen-Zeit sowohl für BaseLanguage-Code (da keine individuellen Abhängigkeiten mehr gesammelt werden müssen) als auch für den Java-Kompilierungsprozess (da es nicht mehr notwendig ist, individuelle Dateiabhängigkeiten zu analysieren, die Dateiabhängigkeiten den Modulen und Klassenpfaden zuzuordnen und den „Dirty“-Status zu propagieren).

Neue Datei zum Speichern von Modulabhängigkeiten

In der neuen Datei deps.cp werden jetzt Abhängigkeiten modulweise gespeichert, damit MPS den Modul-Kompilierungsgraphen ableiten kann. Die Datei hält den Status der Transformation fest, sie ist also „versiegelt“ und maßgeschneidert (sie listet keine Abhängigkeiten auf, die nicht bei der Transformation verwendet wurden); dies steht im Gegensatz zu dem zur Laufzeit erfassten Abhängigkeitsgraphen, der auf den tatsächlichen Modulabhängigkeiten basiert.

UI-Änderungen

MPS erstellt keine Runtime/Sandbox-Lösungen mehr, die unterhalb eines Sprachmoduls eingeordnet sind. Standardmäßig waren diese Module Geschwisterelemente des Sprachmoduls. Bei einer Umbenennung des „main“-Sprachmoduls wurden diese Module weiterhin als „verwandt“ erkannt und zusammen mit dem „main“-Modul umbenannt.

Weitere Informationen

Zusammengesetzte Schlüssel für Label-Mappings

Um die bisher eingeführte Funktionalität für zusammengesetzte Label-Schlüssel zu erweitern, unterstützt MPS die Speicherung zusammengesetzter Schlüssel in Checkpoint-Modellen.

Plattformfunktionen

Fortschrittsanzeige für den Repository-Klonvorgang

Fortschrittsanzeige für Repository-Klonvorgang

Um die Übersicht zu verbessern, wird der Fortschrittsbalken Cloning repository jetzt auf dem Begrüßungsbildschirm direkt in der Projektliste angezeigt.

Neue Inhaltsverzeichnis-Aktion

Neue Inhaltsverzeichnis-Aktion

Sie können jetzt unkompliziert Inhaltsverzeichnisse in Markdown-Dateien erstellen, die auf den Überschriften im Dokument basieren.

GPG-Signatur

GPG-Signatur

Es ist jetzt möglich, Commits mit einer GPG-Signatur zu versehen. Die Signatur wird im Bereich Commit Details im Git-Toolfenster angezeigt.

Ausführung von Befehlen in Markdown-Dateien

Ausführung von Befehlen in Markdown-Dateien

Wenn Sie mit Markdown-Dateien arbeiten, die Befehle enthalten, können Sie diese mithilfe des Ausführen-Symbols in der Randleiste direkt aus der Datei heraus ausführen.

Migrationsleitfaden

Für jede größere Version erstellen wir eine Anleitung für die Migration von älteren MPS-Versionen, um einen reibungslosen Ablauf zu gewährleisten. Bitte prüfen Sie diese sorgfältig.