Что нового в MPS 2018.1

Улучшения в языке SModel

В некоторых ситуациях приходится работать с обычными указателями (такими как SNodeReference или SModelReference), что может быть затруднительно из-за сложности процесса их создания и использования. Чтобы упростить работу с указателями, мы добавили в язык SModel новые типы и операции.

Указатель на узел

Мы упростили работу с указателями на узлы, добавив новый тип «node-ptr<>». С помощью операции «resolve» такой указатель можно преобразовать в сам узел. Выражение «node-ptr / ... /» заменяет прежнюю конструкцию «nodePointer/ ... /», которая теперь является устаревшей. Для того чтобы помочь с конвертацией выражений, мы также создали скрипты для миграции.

Задание ссылок при помощи указателей

Когда вы задаете цель ссылки, нет необходимости обращаться непосредственно к целевому узлу. Можно обойтись указателем на него. Операция «set ptr», применимая к выражениям доступа к ссылкам, позволяет задавать указатели в качестве цели ссылки. Для того чтобы узнать, указывает ли ссылка на тот или иной узел, используйте операцию «is».

Строгие правила типизации для типов smodel

Правила типизации для типов SModel стали более строгими. Методы интерфейса SNodeReference больше не доступны для значений «node-ptr». Для явного получения SNodeReference используйте оператор нисходящего преобразования типа. Кроме того, операция «pointer» при применении к узлам теперь возвращает значение «node-ptr», а не SNodeReference, как раньше.

Выражения node-ptr в макросах ссылки

Макросы ссылки теперь могут принимать выражения node-ptr. Тип указателя, возвращаемого макросом ссылки, проверяется на соответствие типу ссылки.

Использование ID узла для задания указателя

Теперь вы можете использовать название модели и ID узла, для того чтобы задать указатель на неименованный экземпляр концепта или жестко закодировать указатель в виде строки.

Указатели на модели

Тип «model-reference» был заменен на «model-ptr<>». Такой указатель можно преобразовать в саму модель при помощи операции «resolve».

Новые скрипты миграции

Мы добавили несколько скриптов миграции, которые помогут вам в перенесении устаревших конструкций языка SModel: выражений, нежелательных цитат и нисходящих преобразований типа. Для запуска скриптов перейдите в меню Tools -> Scripts -> Enhancements... и выберите «SModel Language Enhancements (node-ptr<> and model-ptr)». Кроме того, в том же окне доступен пункт «Use node pointers in reference macro queries» для переноса устаревших конструкций в макросах генератора.

Улучшенная работа с областями доступа для SModel-запросов

SModel-запросы теперь имеют более интуитивное поведение по отношению к области доступа, в которой они выполняются. Если область доступа объявлена в виде параметра конкретного запроса, то запрос выполняется в контексте всей области доступа, включая модели, доступные только для чтения, а не только редактируемые модели, как это было раньше.

Редактор

Отображение рефлексивного редактора для поддерева

Теперь рефлексивный редактор можно отобразить для целого поддерева. Чтобы сделать это, выберите узел и нажмите Cmd/Ctrl+Shift+[ или выберите «Show reflective editor for subtree» из контекстного меню. Для того чтобы вернуться к обычному редактору, нажмите Cmd/Ctrl+] или Cmd/Ctrl+Shift+] либо кликните мышкой «Show regular editor for the Subtree». Вы по-прежнему можете отобразить рефлексивный редактор только для текущего дерева с помощью сочетания Cmd/Ctrl+[ или через контекстное меню.

Меню трансформации для ячеек свойств и ссылок

В язык описания меню трансформации добавлена поддержка ячеек свойств и ссылок. Новые части меню трансформации, «property» и «reference», предоставляют больше возможностей по настройке меню для ячеек свойств и ссылок, чем «встраиваемые меню», которые использовались раньше.

Главные их преимущества заключаются в следующем:

  • Их можно прикреплять к любым ячейкам, а не только к ячейкам свойств и ссылок.
  • Их можно использовать не только в меню автодополнения, но и в других местах (контекстный помощник, контекстное меню, боковые трансформации).