MPS 2024.1 为 Project(项目)工具窗口中的 Logical View(逻辑视图)窗格带来了新的异步实现,显著改进了对各种平台的 Kotlin 支持,并大幅缩短了测试运行时间。您还将发现生成方案中的条件复刻、TestInfo
中项目路径的弃用、新 UI 改进以及大量平台更新。
具体增强如下所示。
MPS 中的 Kotlin 支持最初设计为仅支持通用代码。不过,MPS 中唯一可能的用例是编译到 JVM,并且通用代码和 JVM 代码之间的区别并不清晰。
在这个版本中,我们为 Kotlin 节点引入了平台源集配置。这让您可以识别一段代码支持哪些目标平台并隐藏不兼容代码中的声明。
在常规 Kotlin 项目中,您可以使用源集来分离针对不同平台的代码。在 MPS 中,我们在根级别引入了此功能,其中包含为每个 Kotlin 根节点指定一组支持平台的选项。这些源集可以在意图操作的帮助下在根节点级别进行配置。
在实践中,这意味着:
没有显式平台的 Kotlin 代码默认使用 JVM,旨在保持向后兼容。
存根已经得到改进,支持新的多平台用例。过去,MPS 为 Kotlin 和 Kotlin/JVM 存根提供独立选项,分别加载通用存根和 JVM 存根。
这两个选项现已统一在 Kotlin 存根下,可以自动确定提供的工件是公开通用代码、JVM 代码还是其他平台的代码。
由于通用库和平台特定库之间的声明冗余(两个工件都包含所有必要声明),我们引入了一种新的重复筛选机制来保持存根整洁。在同一模块下声明时,平台特定库可以访问通用声明,因此您不必再次声明。
依赖项配置与以前相同:
例如,编写通用代码要求您使用通用存根库(使用通用源集),但您还必须在 Java facet 中声明 Java 工件。
当基于 CodeRules 的 Kotlin Typesystem 插件不可用时,MPS 中的 Kotlin 代码此前会引发大量 typesystem
和作用域错误。为了提高可读性和可测试性,当基于 CodeRules 的 typesystem 插件不可用时,这些检查和错误现在会被忽略。
在这种情况下,Kotlin 语言中的所有作用域都被替换为包括所有兼容概念节点的默认作用域。由于所有有效节点都在作用域内,这会移除误报错误。
处理 Kotlin 代码的准则与以前相同:
Logical View(逻辑视图)窗格现在基于异步架构,这有助于保持 UI 快速响应和提高 IDE 的整体性能。新实现还简化了扩展和修改。有关详情,请参阅知识库中题为 ProjectPane implementation on top of ProjectViewTree 的文章。
新实现带来了一些显著变化:
MPS 测试报告现在会考量 JUnit @DisplayName
注解并将名称传播到测试报告工具窗口中显示的报告。
运行节点或编辑器测试时,MPS 过去会将整个测试模型复制到瞬态模型中,并为每个测试用例节点制作额外副本(从根 NodeTestCase
或 EditorTestCase
开始)。对于大型测试模型,这往往会明显影响性能。它还会导致带有重复测试节点的奇怪设置。在 MPS 2024.1 中,带有测试的模型将不再被复制,只有 NodeTestCase
或 EditorTestCase
的 TestNode
子项及其各自环境节点(它们的引用的目标)会被复制。
对于需要打开 MPS 项目的测试,不再需要 TestInfo
声明。这适用于执行 JUnit 测试的所有方式:
<launchtests>
任务运行,则可以将 project path 指定为任务的额外项目路径选项。如果未指定,将使用 ${basedir}
,它对应于当前项目的主目录。
-Dmps.test.project.path
系统属性指定项目位置。现有 TestInfo
声明仍然受支持并且可以保留。
在将类加载与模型访问和 ReloadableSModule
的弃用分离的过程中,我们改变了模块的类加载的工作方式。虽然我们已经尽力为最终用户避免明显更改,但更新可能导致以前不存在的类加载问题。
作为此次重做的一部分,MPS 现在继续使用在 module.xml
中为部署的模块声明的依赖关系,而不会尝试在启动时根据分散在模块文件中的信息来计算。在设计阶段,依赖关系派生自模型转换阶段收集的信息,并且在这里也不会重新计算。分析 .mpl
或 .msd
文件的模块依赖项的旧逻辑仍然有效,以防新方法失败。
这些更改是改进 Java 模块 facet 以及模块 facet 的长期工作的一部分。
依赖默认作用域计算时,注释掉的潜在目标节点现在会自动从作用域中排除。
BaseLanguage
。MPS 2024.1 推出了重做的终端,具有可视化和功能增强,有助于简化命令行任务。此更新为既有工具带来了全新的外观,命令被分为不同的块,扩展的功能集包括块间丝滑导航、命令补全和命令历史记录的轻松访问等。在这篇博文中了解详情。
从这个版本开始,MPS 不再支持使用低于 Gradle 版本 4.5 的项目,并且 IDE 不会对带有不支持的 Gradle 版本的项目执行 Gradle 同步。