MPS 2018.3的新增功能

基本语言

概念覆盖/实现的图标

MPS用覆盖/已实现的图标标记概念,从而帮助您轻松导航到当前概念的超概念或子概念。

BaseLanguage类的自定义包

长期以来,管理所生成类的Java包的唯一方法是通过包含模型的名称。但是,使用新的Classifier属性'packageName',您可以管理所生成类的Java包。此属性也可用于根分类器。

BaseLanguage扩展的新一代功能

BaseLanguage始终旨在通过大量扩展进行定制。但是,对于某些扩展,实现适当的生成器可能很棘手。现在,BaseLanguage提供了几个新的生成时概念,以帮助简化编写扩展程序的生成器的过程。

生成左值表达式

左值表达式被评估为可以用值读取或写入的变量。在某些情况下,生成Lvalue表达式很困难,因为它可能取决于表达式所用的上下文类型。现在,可以使用新的“通用左值表达式”生成时间概念来简化生成器,并且不了解上下文。

幸运的是,在新版本中,您可以使用'@byRef'表达式包装任意的左值表达式。然后,BaseLanguage生成器将包装后的表达式转换为'Reference <T>'类型的表达式,这将为您提供包装后变量的get和set操作。

本文将更详细地介绍这两个新引入的生成时概念。

将左值转换为引用

一些表达式会聚合其他Lvalue表达式,以使用由聚合表达式生成的变量进行复合运算(例如,加上赋值或递增并获取表达式)。用这样的语义引入新的表达式过去是不可行的,因为很难为这种结构编写合适的生成器。

BaseLanguage中的默认方法支持

在2018.3版中,MPS可以在BaseLanguage接口中创建“默认”方法。“ default”关键字由DefaultModifier概念实现,该概念在BaseLanguage中扩展了Modifier概念。DefaultModifier位于jetbrains.mps.baseLanguage.jdk8语言中。这意味着,为了在界面中创建“默认”方法,您需要导入jdk8语言。

发电机

生成器语言

$ INCLUDE $宏已被弃用,并且正在进行迁移以将其实例替换为$ CALL $。前者不支持带参数的模板,并且我们没有看到任何理由保留这两种机制来调用模板。

$ WEAVE $宏和编织规则现在可以调用带有参数的模板。当解释的模板从“已编译”的生成器编织外部模板时,将不再对其进行解释,但仍将执行已编译的模板代码。“已编译”模板现在可以编织已解释的模板。

Java反射不用于从模板模型(也称为QueriesGenerated)访问查询集合。

UI / UX

MacBook TouchBar

默认上下文包括用于运行,构建和调试应用程序的控件,并能够快速选择或创建新的运行/调试配置。现在有一个新的触摸栏页面,可在“首选项” |“自定义”下自定义操作。外观与行为|菜单和工具栏。

是的,它是可扩展的!只需将任何必需的操作添加到特殊的MPS'InterfaceGroup'。

高对比度UI主题

我们增加了对新的高对比度主题的支持,可以使用“首选项”->“外观和行为”下的主题选项中的下拉列表进行访问。

查找已弃用代码的新操作

查找已弃用的操作可查找已弃用元素的所有用法。现在,找到的使用情况的报告将按预期的代码删除版本对条目进行分组,因此更容易识别它们的严重性并确定要先消除的严重性。

覆盖或实现的行为方法的新图标

行为方法已配备了新图标。下面的屏幕快照显示了getPresentation()方法的列表,这些方法将覆盖或实现所选的方法,并将允许您从那里导航到它们。

覆盖/实现的图标进一步增强

具有被覆盖/实现的概念/类/方法的弹出窗口已变为异步,这意味着MPS将在后台用搜索结果填充弹出窗口。另外,您现在可以使用搜索对象的名称进行过滤。

查找器更改

MPS分发的查找器已更新和优化。要异步执行查找程序,您需要使用特殊的OnEachNodeFoundByExpression,它表示一个简单的查找程序调用,并为每个找到的节点执行一个回调。因此,概念的查找用法选项已更改。这些选项已通过“派生的概念”和“概念祖先”进行了扩展,分别生成了子概念和超概念的列表。此外,行为方法的查找用法选项已通过“重写方法”和“重写方法”进行了扩展。

抑制特定错误

错误抑制曾经是防止MPS显示类型系统检查器不正确发现的错误的粗略工具。如果使用意图“为节点...抑制错误”对节点进行了属性“ SuppressErrorAnnotation”的注释,则不会显示该节点或其任何后代的错误消息。

现在,有可能仅抑制特定的错误消息。该错误消息将针对该节点及其所有后代而被禁止,但其他任何消息仍将保留。有关更多信息,请参阅文档

编辑

可重复使用的单元动作图

现有动作图中的单元动作图项目可以通过导入在新的动作图中重复使用。

构建语言

提示与技巧

现在可以自定义MPS的默认提示和技巧。这可以通过构建脚本中的新提示和技巧概念来完成。提示可以从常规MPS发行版中重复使用,也可以从目录或解决方案中导入。

提示与技巧

要从解决方案中导入提示和技巧,请使用模型创建解决方案,并添加语言jetbrains.mps.build.tips和jetbrains.mps.core.xml以对使用的语言进行建模。然后,您可以创建MPSTipsAndTricks概念的实例,可以在其中创建多个提示。每个提示均为HTML格式的文本,最多可包含一张图片。

建立包装选项

BuildMps_IdeaPlugin中的自定义打包选项已被弃用,从现在开始不应该使用。现在可以直接在布局BuildMpsLayout_Plugin结构中选择包装。

通过自动打包,所有提供的语言和解决方案都将放在插件根目录下的“ languages”文件夹中。另一方面,手动打包意味着开发人员必须自己提供整个插件布局。

Build Language中的新结构

扩展了构建语言中的测试模块配置,以指定其他IntelliJ IDEA插件,这些插件必须在执行MPS ant测试时加载。

在某些情况下,测试需要在其环境中使用特定的插件,而MPS构建语言引擎无法从包含测试的模块中推断出这些场景。现在,您可以确保在MPS Ant测试执行期间存在所需的插件。

完全编译的数据类型

我们已经完全生成了数据类型。现在可以从SModel API获得有关数据类型的所有生成信息。

将迁移数据另存为注释

现在,MPS支持一种新的迁移数据传输机制,我们强烈建议新创建的迁移。现在,应该将包含数据的产生的节点附加到与数据相关的位置足够近的任何节点。

生成包含数据的节点的迁移脚本应声明此类节点的概念,并使用putData()构造将每个此类注释插入模型:

检索包含数据的节点的方式与以前非常相似:

改善冲突解决

以前,不可能同时从本地和远程应用更改,因为从一侧进行的更改只是拒绝了另一侧的更改。

对于具有多个角色的孩子,如果同时应用两个更改,则不切实际。这就是为什么现在在您从冲突的一侧应用更改之后,将其他冲突的更改转换为更改组末尾的附加项的原因。有必要分别应用或忽略它们。

在应用冲突的左侧版本之后,您仍然可以从右侧应用或忽略该行: