Kotlin 的 IDE 插件 2021.1 发布: 性能的提升以及更好的重构支持

Read this post in other languages:

伴随着 IntelliJ IDEA 最新版本 2021.1 的发布,Kotlin 插件也迎来了进一步的优化和提升。 这次更新主要聚焦于开发体验的改善,包括更高效的代码补全和高亮,对更完善的函数签名修改支持,以及对属性计算的增强而带来的调试体验提升等等。

详细更新内容如下:

自动升级到该版本

您可以通过配置 IntelliJ IDEA 实现版本的自动升级。
如果您还不是 IntelliJ IDEA 的用户,您可以点击下载最新版本,其中集成了最新的 Kotlin 插件。

体验高效的代码补全和高亮

有时候,代码的编写并不像想象中的有趣,特别是在等待 IDE 缓慢的代码高亮和代码补全的过程当中。 我们的目标就是让代码高亮和补全丝般顺滑,让开发者不再为此着急上火。

新版的 Kotlin 插件对此做出了极大的提升和改善。

从我们的测试结果来看,代码高亮效率提升了 25%,代码补全效率则提升了 50% 以上,在这一点上 Kotlin 已经与追平 Java 十分接近了。

需要指出的是,这些数据仅基于我们的测试结果, 实际开发当中的体验提升可能不如测试数据那么显著,但也足以让您能够切身体会到这一点了。

新插件当中的 Kotlin 代码高亮

在下图中您可以看到 2020.3 和 2021.1 新旧两个版本的 Kotlin 插件在代码高亮上的性能差异。 图中的数据基于对复杂 Kotlin 文件当中的代码高亮的基准测试。
undefined

新插件当中的 Kotlin 代码补全

以下为 2020.3 和 2021.1 新旧两个版本的 Kotlin 插件的代码补全性能对比。 同样,这些数据基于对复杂 Kotlin 文件当中的代码补全的基准测试。
undefined

更完善的函数签名重构支持

如果您曾体验过旧版本的 Kotlin 插件的函数签名修改功能,您一定遇到过各种各样的问题和限制。而 IDE 对于这些问题的说明,多数情况下也是“讳莫如深”。
新版 Kotlin 插件针对函数签名修改特性做出了共计超过 40 项 bug 修复和功能优化
以下是最重要的一些优化点:

  • 针对修改签名后可能出现的错误结果提供了更加充分的检测能力。
  • 修复继承重构的问题,包括跨语言的重构
  • 针对属性处理部分的 UX 提升。
  • 新增对默认参数的支持
  • 修正对反引号的处理(译者注:旧版本的签名修改不识别形如 X-ray 这样用反引号引起来的函数名,而这在 Kotlin 当中是合法的 )。

在变量视图中直接计算自定义 getter 的值

研究表明,想要提升 Kotlin 的整体开发体验,就需要极大的优化 Kotlin 的调试体验,我们也已经启动了一系列优化改善计划来做到这一点。

在这次版本更新中,我们发布了一个虽然小但重要的特性,那就是在Variables 视图当中计算自定义属性的值。

之前,在调试会话当中,您只能看到没有自定义 getter 的属性的值,这些属性都有一个 幕后字段(backing field)。 有自定义 getter 的属性不会出现,因为它们被当做了 JVM 上的方法。 在 Kotlin 插件的 2021.1 版本当中,您可以看到所有这样的属性,并且只需要点击属性名后面的 get() 就可以按需计算它们的值。

例如,当调试以下代码时,您可以执行 get() 方法来检查 versionString 的值:

Debug 窗口当中,您可以看到这些属性的值:

undefined

我们非常期待您能够体验一下这个功能并对此发表您宝贵的意见。您可以在此进行反馈,也可以直接评论本文。

使用支持泛型参数的代码补全

新版 Kotlin 插件可以支持类型参数的自动补全。 而之前,您只能手动输入这些类型参数而无法得到 IDE 的帮助。

代码补全可以在泛型函数之后提示函数和属性,并在需要的时候补全泛型参数。 当您在提示列表当中选择了这样的一个函数,IDE 会在前面的代码中自动添加相应的泛型参数。

例如在下面的代码中,IDE 自动添加了<String>()类型:
undefined

当您应用了 IDE 的提示以后,您将得到以下代码:

使用类图来检查 Kotlin 的代码结构

新版发布以后,您可以使用 UML 类图来检查 Kotlin 的代码结构。 想要构建一个类图,只需要在 Project 视图中右键选择 Diagrams | Show Diagram… | Kotlin Classes
undefined

其他 IDE 相关的优化提升

由于 Kotlin 插件和 IntelliJ 平台的代码迁移到了同一个代码库并且同步发布,您将同样可以体验到来自以下其他方面的 Kotlin 开发体验的提升:

另请参见

特别感谢由来自 Kotlin 社区的 Benny Huo 为本篇博文提供中文译文。
image description

Discover more