MPS 2024.1 enthält eine neue asynchrone Implementierung der Logical View im Project-Toolfenster, bietet wesentliche Verbesserungen bei der Kotlin-Unterstützung auf verschiedenen Plattformen und führt Tests spürbar schneller aus. Außerdem gibt es nun bedingte Forks in Generierungsplänen, die Projektpfade in TestInfo
wurden als veraltet gekennzeichnet, die neue Bedienoberfläche hat Verbesserungen erhalten und es wurden zahlreiche Plattformaktualisierungen vorgenommen.
Im Folgenden stellen wir Ihnen die Verbesserungen im Detail vor.
Die Kotlin-Unterstützung in MPS wurde ursprünglich nur für die Unterstützung von Common-Code entwickelt. Der einzige mögliche Anwendungsfall in MPS war jedoch die Kompilierung für die JVM, und die Unterscheidung zwischen Common-Code und JVM-Code war unklar.
In dieser Version führen wir die plattformspezifische Konfiguration von Quellcode-Sets für Kotlin-Knoten ein. So können Sie erkennen, welche Zielplattformen ein Codeabschnitt unterstützt und Deklarationen vor inkompatiblem Code verbergen.
In einem normalen Kotlin-Projekt können Sie Quellcode-Sets verwenden, um Code für unterschiedliche Plattformen zu trennen. In MPS haben wir dies auf der Stammknoten-Ebene eingeführt, mit der Option, für jeden Kotlin-Stammknoten die unterstützten Plattformen anzugeben. Diese Quellcode-Sets können auf der Stammknoten-Ebene über eine Kontextaktion konfiguriert werden.
In der Praxis bedeutet dies Folgendes:
Standardmäßig verwendet Kotlin-Code ohne explizite Plattform die JVM, um die Abwärtskompatibilität zu wahren.
Stubs wurden verbessert, um neue Multiplattform-Anwendungsfälle zu unterstützen. In der Vergangenheit bot MPS separate Optionen für Kotlin- und Kotlin/JVM-Stubs für das Laden von Common- bzw. JVM-Stubs.
Diese beiden Optionen wurden nun unter der Option für Kotlin-Stubs zusammengeführt. Dabei wird nun automatisch ermittelt, ob ein bereitgestelltes Artefakt Common-Code, JVM-Code oder Code für andere Plattformen enthält.
Da Deklarationen zwischen Common- und plattformspezifischen Bibliotheken redundant sind (da beide Artefakte alle benötigten Deklarationen enthalten), haben wir einen neuen Mechanismus zum Filtern von Duplikaten eingeführt, um bei Stubs die Übersichtlichkeit zu wahren. Wenn plattformspezifische Bibliotheken unter demselben Modul deklariert werden, können sie auf gemeinsame Deklarationen zugreifen, sodass Sie sie nicht erneut deklarieren müssen.
Die Konfiguration der Abhängigkeiten erfolgt unverändert:
Wenn Sie zum Beispiel Common-Code schreiben, müssen Sie eine Common-Bibliothek für Stubs verwenden, die das Common-Quellcode-Set nutzt, aber Sie müssen auch das Java-Artefakt im Java-Facet deklarieren.
Kotlin-Code in MPS führte früher zu zahlreichen typesystem
- und Scope-Fehlern, wenn das auf CodeRules basierende Kotlin-Typesystem-Plugin nicht verfügbar war. Um die Lesbarkeit und Testbarkeit zu verbessern, werden diese Prüfungen und Fehler jetzt stummgeschaltet, wenn das CodeRules-basierte Typesystem-Plugin nicht verfügbar ist.
In solchen Fällen werden alle Scopes in Kotlin-Sprachen durch einen Standard-Scope ersetzt, der die Knoten aller kompatiblen Concepts umfasst. Dies beseitigt alle Fehlalarme, da sich alle gültigen Knoten im Scope befinden.
Die Richtlinien für die Handhabung von Kotlin-Code bleiben unverändert:
Die Logical View-Leiste verwendet jetzt eine asynchrone Architektur, die zur Reaktionsschnelligkeit der Bedienoberfläche beiträgt und die allgemeine IDE-Performance verbessert. Die neue Implementierung vereinfacht auch die Umsetzung von Erweiterungen und Änderungen. Für weitere Informationen lesen Sie bitte unseren Artikel ProjectPane implementation on top of ProjectViewTree in der Knowledge Base.
Diese neue Implementierung hat zu einigen erwähnenswerten Änderungen geführt:
Wir haben in der BaseLanguage
einen neuen Stil eingeführt, der es ermöglicht, konstante Zellen als Platzhalter für fehlende Werte (untergeordnete Knoten oder Referenzen) zu verwenden. Wenn zum Beispiel kein Konstruktor in einer Klasse vorhanden ist, kann stattdessen die Platzhalterzelle <no default constructor>
angezeigt werden. Der Stil bewirkt, dass konstante Zellen ein für Platzhalterzellen erwartbares Verhalten zeigen. Der Cursor kann nur auf die erste Position gesetzt werden, und der Wert ist schreibgeschützt. Erlaubt sind nur Änderungen, die durch zugeordnete Transformationsmenüs vorgenommen werden.
Die boolesche Option doNotCompile
von Modulen in der Build-Sprache wurde durch ein Java-Enum ersetzt, um die folgenden Fälle besser zu unterscheiden:
Beiden Fällen entsprach früher der Wert true
.
Das neue Java-Enum hat drei mögliche Werte:
compile in MPS
compile externally
no code
Bei der Migration auf 2024.1 wird in der Option doNotCompile
der Wert false
in compile in MPS
und der Wert true
in compile externally
geändert.
Eine experimentelle neue Funktion ermöglicht das Forken eines Generierungsplans, ohne den ursprünglichen Plan, auf dem der Fork basiert, zu verändern. Ein Generierungsplan kann als Fork eines anderen Generierungsplans gekennzeichnet werden. Der gekennzeichnete Plan wird so behandelt, als würde er explizit mit der üblichen fork
-Anweisung am Anfang des geforkten Generierungsplans referenziert.
Darüber hinaus können Sie beim Definieren eines Forks einen Modifikator-String verwenden, der als Trigger dient. Der Fork wird nur erstellt, wenn das zu generierende Modell einem Modul angehört, das ein Generierungsziel-Facet besitzt, dessen Facet-ID mit dem Trigger-String übereinstimmt.
JUnit-Tests in MPS können jetzt Testberichte nicht nur in den Formaten Vintage und Jupiter, sondern auch im Open-Test-Reporting-Format erzeugen. In den Testoptionen der Build-Sprache steht eine neue Option zur Verfügung, mit der Sie festlegen können, ob der Open-Test-Bericht in den generierten Berichten enthalten sein soll. Wenn die Option auf true
gesetzt ist, werden im Projektverzeichnis Berichtsdateien mit dem Namen junit-platform-events*-$BUILD_NAME$.xml
angelegt.
Wenn die Option auf false
gesetzt ist, werden Berichte in den Altformaten Vintage und Jupiter erstellt.
MPS-Testberichte berücksichtigen jetzt die @DisplayName
-Annotation von JUnit und übernehmen den Namen in die Berichte, die im Testbericht-Toolfenster angezeigt werden.
Beim Durchführen eines Knoten- oder Editortests kopierte MPS bisher das gesamte Testmodell in transiente Modelle und erstellte zusätzliche Kopien von jedem Testfallknoten (ausgehend vom Stammknoten NodeTestCase
oder EditorTestCase
). Bei großen Testmodellen konnte dies die Performance spürbar bremsen. Außerdem entstanden dadurch recht merkwürdige Setups mit duplizierten Testknoten. MPS 2024.1 kopiert Modelle mit Tests nicht mehr. Kopiert werden nur noch die TestNode
-Unterknoten des NodeTestCase
bzw. EditorTestCase
zusammen mit ihren jeweiligen Umgebungsknoten (den Zielen ihrer Referenzen).
TestInfo
-Deklarationen sind nicht mehr erforderlich für Tests, die ein geöffnetes MPS-Projekt voraussetzen. Dies gilt für alle Ausführungsmethoden von JUnit-Tests:
<launchtests>
ausgeführt wird, kann der Projektpfad als zusätzliche project path-Option des Tasks angegeben werden. Wenn nichts angegeben ist, wird ${basedir}
verwendet, was dem Home-Verzeichnis des aktuellen Projekts entspricht.
-Dmps.test.project.path
angeben.Bestehende TestInfo
-Deklarationen werden weiterhin unterstützt und können beibehalten werden.
Um das Laden von Klassen vom Modellzugriff zu trennen und der Deprecation von ReloadableSModule
Rechnung zu tragen, haben wir den Ablauf beim Laden von Klassen in Modulen geändert. Obwohl wir uns bemüht haben, die Änderungen so vorzunehmen, dass sie für Anwender*innen nicht spürbar sind, können die Updates möglicherweise zu bisher nicht beobachteten Problemen beim Laden von Klassen führen.
Im Rahmen dieser Überarbeitung hält sich MPS nun an die in module.xml
für die bereitgestellten Module deklarierten Abhängigkeiten, ohne zu versuchen, diese beim Start anhand der in den Moduldateien verstreuten Informationen zu berechnen. In der Designphase werden die Abhängigkeiten aus Informationen abgeleitet, die in der Phase der Modelltransformation gesammelt wurden, und auch hier werden sie nicht neu berechnet. Die alte Logik, die Modulabhängigkeiten aus .mpl
- oder .msd
-Dateien berechnet, ist immer noch als Ausweichmethode vorhanden, falls die neue Methode versagt.
Diese Änderungen sind Teil unserer laufenden Bemühungen, Java-Modul-Facets und Modul-Facets im Allgemeinen zu verbessern.
Bei Verwendung der Standard-Scope-Berechnung werden auskommentierte potenzielle Zielknoten jetzt automatisch aus dem Scope ausgeschlossen.
BaseLanguage
wurde ein hexadezimales Long-Literal eingeführt.MPS 2024.1 führt ein überarbeitetes Terminal ein, das sowohl visuelle als auch funktionale Verbesserungen aufweist, um Befehlszeilenaktivitäten zu optimieren. Dieses Update verleiht dem vertrauten Tool ein frisches Aussehen. Die Befehle sind in Blöcke unterteilt und der Funktionsumfang wurde erweitert. Sie können zum Beispiel einfach zwischen den Blöcken navigieren, Completion-Vorschläge für Befehle nutzen und unkompliziert auf den Befehlsverlauf zugreifen. Mehr dazu erfahren Sie in diesem Blogbeitrag.
Ab dieser Version unterstützt MPS keine Projekte, die Gradle-Versionen vor 4.5 verwenden. Die IDE führt keine Gradle-Synchronisierung für Projekte mit nicht unterstützten Gradle-Versionen durch.
MPS 2024.1 vereinfacht den Code-Review-Workflow durch eine fokussierte Anzeige von Branch-bezogenen Änderungen. Bei Verwendung von GitHub, GitLab und Space können Änderungen in einem bestimmten Branch jetzt in einem separaten Log-Tab des Git-Toolfensters eingesehen werden. Klicken Sie dazu auf den Branchnamen im Toolfenster Pull Requests und wählen Sie im Menü Show in Git Log aus.
Nachdem Sie Ihre Änderungen erfolgreich in die Versionsverwaltung gepusht haben, informiert Sie die IDE nun mit einer einzigen Benachrichtigung über den erfolgreichen Push und empfiehlt eine Aktion, mit der Sie einen Pull-/Merge-Request erstellen können.
Wir haben visuelle Markierungen eingeführt, die Sie über anstehende Updates innerhalb Ihres Code-Review-Workflows informieren. Wenn es Änderungen gibt, die Ihre Aufmerksamkeit erfordern, wird auf dem Toolfenster-Symbol ein Punkt angezeigt. Ungelesene Pull-Requests werden ebenfalls mit einem blauen Punkt gekennzeichnet, damit Sie keine Updates in Ihrem Code-Review-Prozess verpassen.
Im Git-Toolfenster wurde die Schaltfläche Show all branches durch einen Branch-Filter ersetzt, mit dem Sie Änderungen in einer Datei innerhalb eines bestimmten Branches überprüfen können. Für eine einfachere Bedienung haben wir außerdem die Symbolleiste horizontal ausgerichtet.
Im Diff-Betrachter können Sie jetzt Ordner und Dateien angeben, die beim Vergleichen ignoriert werden sollen, um sich ausschließlich auf relevante Änderungen zu konzentrieren. Klicken Sie einfach mit der rechten Maustaste auf die Datei oder den Ordner, der nicht in den Vergleichsergebnissen erscheinen soll, und wählen Sie im Kontextmenü Exclude from results aus.
Für jede Hauptversion bieten wir eine Anleitung für die Migration von älteren MPS-Versionen, um einen reibungslosen Umstieg zu gewährleisten. Bitte überprüfen Sie sie sorgfältig im aktualisierten Migrationsleitfaden.