IntelliJ IDEA 开发工具

IntelliJ IDEA 2019.3: 更高的性能、更好的品质

请热烈欢迎 IntelliJ IDEA 2019.3 – 我们的旗舰版 IDE 今年的第三次也是最后一次重要版本!这次 IntelliJ IDEA 新版本主要着重在性能与品质上。

 我们举办了一场“质量马拉松”,在此期间 IntelliJ IDEA 团队与其他 JetBrains 开发人员团队一起集会,专门致力于优化此 IDE 并进行性能改进、UI 回应速度修复、实用性增强、现有功能改进等。为了更好地定义此发布周期的优先级,我们现在更加依赖您的反馈。我们非常感谢所有分享改进建议并将问题报告给我们跟踪器的人。

在本发布周期中,我们的团队设法解决了 1600 多个问题,这些问题在我们的问题跟踪器中总共获得了 3900 多张选票。

我们还推进了一些正在进行的项目,例如对 Micronaut、Quarkus 和 Helidon 等新微服务框架的支持 ,以及对 MongoDB 期盼已久的支持。

我们希望这些努力能让使用 IntelliJ IDEA 开发变得更有乐趣!

深入阅读以了解更多详细信息。

更高的性能

我们一直在努力提高 IntelliJ IDEA 的性能,已取得了以下成果:

  • 更快的 IDE 启动速度

  • 总体上更出色的 UI 响应性、更少的 UI 和编辑器冻结

  • 减少了内存消耗,特别是 Gradle 项目导入时的内存消耗。

今年,我们的首要任务之一是加快启动时间。

 为了实现这一目标,我们在 IntelliJ 平台中引入了许多重要的更改,包括让一些按顺序运行的进程并行化,以一种使初始类加载更快的方式重新组织了类,优化了 macOS 上的字体加载,等等。

改善 UI 响应性是我们关注的另一个重要领域。我们已经努力解决了 IntelliJ IDEA 各个部分中发生的 UI 冻结问题,因为没有人希望用户界面没有响应。我们简化了报告 UI 冻结的步骤,在本发布周期中,我们一直忙于解决我们收到的报告(谢谢!)我们解决了导致 1600 多份报告中提到的 UI 冻结的许多问题。此外,当一个正则表达式模式与“Find in path”中的超长字符串匹配或者使用大量编辑器或调试器选项卡时,IntelliJ IDEA 也不会冻结。

 现在,IDE 还可以更快地渲染项目树。我们还通过投入大量精力优化 Java 类型推理,修复了其他各种编辑器冻结问题。说到 Java 性能改进,用于长方法调用链的 Java 类型推理现在的运行速度也快得多。我们加快了 Java 文件中代码高亮显示的速度,特别是对于包含泛型变量-参数(Arrays.asList、Map.ofEntries 等)的方法,它们可能传递几十种参数。

一次针对多个行调用的 Join Lines 操作的性能也得到了提升。我们已经将 Kotlin 插件 v1.3.60 与 IntelliJ IDEA 捆绑在一起,这也加快了 Kotlin 文件中编辑器的高亮显示速度。版本控制子系统中的性能得到了优化:我们成功优化了事件和忽略文件的处理。在大型项目中,冻结更少,状态更新更快。在构建子系统中,我们成功减少了导入大型 Gradle 项目时的峰值内存消耗。

对于 Maven 项目,我们已经消除了在编辑 pom.xml 文件时出现的冻结问题,因此 IDE 现在可以毫无延迟地显示补全建议。我们对已经取得的成果感到满意,但任务还没有完成!我们计划继续努力,您可以期待在下一个版本中获得更快的启动速度和更多优化。

现有功能的质量提高

IntelliJ IDEA 拥有一个丰富的插件生态系统,您可以通过我们的插件库访问许多不可思议的插件。不过,过去的缺点是管理插件有点麻烦,因为每次加载和卸载插件都需要重新启动 IDE。

 IntelliJ IDEA 2019.3 通过实现核心底层基础架构(即,支持动态插件安装)解决了这一问题。基本上,这意味着 IDE 现在可以任意加载和卸载插件而无需重新启动。当前已为主题和键盘映射插件启用了此功能。不过,在未来的版本中,我们计划将此功能扩展到大多数插件。这是使插件管理尽可能简单的第一步。

版本控制子系统中进行了许多可用性改进。为了确保清晰,我们改进了 Git 签出工作流,移除了“Checkout as”操作并引入了 2 个新的单独操作:“New Branch from Selected”和“Checkout”。新的“New Branch from Selected”操作会创建一个新分支,并且不会设置跟踪。“Checkout”操作会静默创建一个新的本地分支,将其签出,并在没有同名的本地分支的情况下对选定的远程分支设置跟踪。

为了统一 UI 以从不同的 VCS 托管服务获取项目,我们重新设计了 Clone 对话框。您现在可以从此对话框登录,或者如果您已登录,IDE 会立即预览按帐户或组织分组的所有存储库的列表。另外,由于现在有一种直接的方法,因此无需签出即可推送分支:只需在 Branches 弹出窗口中找到所需的分支并推送。

 此外,对于已重命名或移动的文件,我们还将文件名列添加到文件历史记录中。您可能会发现另一项实用的改进是能够将文件强制添加到 Git(或 Mercurial)中,即使此文件位于 .gitignore(或 .hgignore)列表中。

我们在 IntelliJ IDEA 2019.2 中引入了对 Java 13 的基本支持,而在这个版本中,我们显著改进了对 Java13 文本块的支持。我们最近发布了有关这些更改的博文,其中包含更多细节。

添加了新的 Field Call Hierarchy 操作。只需使用 Ctrl + Alt + H(Windows、macOS、Linux),即可查看选定字段的层次结构。这让一切都变得更加简单。

现在,如果您启用了“Show quick documentation on mouse move”复选框,将鼠标指针悬停在警告或错误上方将显示一个统一的工具提示,其中会显示警告或错误的说明以及代码参考信息。
以前,在这种情况下,IDE 仅显示检查工具提示而不是文档,有时甚至一次显示 2 个弹出窗口。

意图操作对话框的默认行为已更新,如果您选择意图操作然后取消对话框,意图操作不会从建议列表中消失。

现在,Services 工具窗口始终显示,并且可以直接在其内部进行配置。

除此之外,您还可以从此工具窗口中隐藏特定的运行配置。

其他实用的改进:

  • 重新设计了不匹配的类型工具提示,以提高其可读性。

  • 打开项目后,IntelliJ IDEA 现在将显示项目名称。

  • 现在,您可以注入更多的模板语言,特别是 Pug(之前的 Jade)、Handlebars、EJS 和 Slim。

  • 现在,使用鼠标滚轮滚动更加平滑。

  • 现在,借助 Preferences/Settings | Appearance & Behavior | Appearance 中的“Use contrast scrollbars”复选框,可以让滚动条更明显。

支持新框架和技术

尽管此版本以质量为导向,但一些已经开发一段时间的重要功能随时可以引入。请注意,我们在下面讨论的所有炫酷的新功能仅在 IntelliJ IDEA Ultimate 中可用。在我们开始为本发布周期作准备之前很久,微服务已经引起了诸多关注。

 在某种程度上,我们认为我们可以使开发过程更加愉快,并增加对框架和技术(常用于开发采用基于微服务的架构的 Java 和 Kotlin 项目)的支持。

幸运的是,在此版本中,星标与微服务完美贴合,我们已经开始进行集成。

首先,我们为新一代微服务框架(即 Micronaut、Quarkus 和 Helidon)添加了丰富的编码辅助和导航。我们还想到了在 Spring 基础上使用响应式 Web 服务的人员,并增加了对 Spring Web Flux 的支持。

通常,微服务通过 HTTP/WebSocket 彼此通信,因此对我们来说,下一步是添加对常见 Java HTTP 客户端 API 的支持,例如 java.net.URI/URL、Retrofit v2、OkHttp v3 以及 Spring Feign、MicroProfile REST 客户端等流行服务器端框架的客户端库。这种新添加支持的优点在于,IDE 现在可以为 HTTP/WebSocket API 提供 URL 补全和导航。

在下一阶段,我们认为可以为您项目中的端点提供出色的布局,因此我们添加了全新的“Endpoints”工具窗口。此窗口显示客户端和服务器 API 的聚合视图。它将逐渐成为所有 API 的中心位置,不仅仅是 HTTP,还有消息传递、gRPC 和 GraphQL。

最后,我们增加了对 API 文档规范的扩展支持。在此版本中,规范是 Swagger v2 和 OpenAPI Specification v3。我们希望在工作中使用规范优先方法的任何人都能在其 IDE 中对包含 API 描述的 YAML/JSON 文件充分利用按架构的验证、代码补全、导航、查找用例和 Rename 重构功能。

相当酷,对吧?目前,仅支持 Java 和 Kotlin 项目,但是我们的计划不止于此,在未来的版本中,我们会将支持范围扩展到更多的语言和框架。

除此之外,IntelliJ IDEA 2019.3 还引入了备受期待的 MongoDB 支持。目前,这只是初步支持,但我们计划在未来增强。现在,您可以利用 IntelliJ IDEA 在数据库资源管理器中查看集合与字段、运行查询以及查看查询结果。

重要的 Bug 修复

我们解决了许多问题,下面列出了一些最重要的问题:

  • 现在,通过 Homebrew 安装 IntelliJ IDEA 时,可以定位到已安装 Gradle 的目录。

  • 现在可以更轻松地手动设置 Gradle 主目录。

  • IDE 现在支持在 Linux 上通过 KWallet 存储密码。

  • 处理 JavaFX 项目时,IDE 可以利用 Scene Builder 选项卡中的嵌入式 Scene Builder 显示 FXML 文件。

  • Debug 工具窗口中的键盘导航现在可以正常使用。

  • 现在,可以使用 Ctrl+C 复制检查弹出窗口中的选定文本。

  • 在 IDE 窗口之间切换时,焦点不会丢失。

  • 修复了窗口和弹出窗口位置。

  • 在 IDE 中选择 Darcula 主题时,将以深色主题打开调用的 macOS 窗口。

我们还更新了 JetBrains Runtime 11 (JBR 11) 以集成大量修复。

  • 修复了 macOS Catalina 上的字体渲染问题。

  • 修复了在 macOS 10.15 Catalina 上打开项目时的问题。

  • 修复了 Evaluate Expression 对话框中的符号。

  • 当前检测到键盘布局与操作系统存在冲突。

  • 修复了编辑器中的字体总是斜体的问题。

  • 修复了 Windows 上的欢迎屏幕。

  • IDE 现在会警告 IDE 键盘映射与原生操作系统键盘映射存在冲突。

  • 修复了编辑器中不正确的字体(斜体)。

其他变化

此版本还包含 Android Studio 3.5 的所有更改。我们还取消捆绑了 Vaadin 和 Java Applets Support 插件。这些插件将在我们的插件库中提供,可以手动安装。

我们在此版本中尝试了一种略有不同的方法,希望您喜欢!如果您想深入了解已解决问题的完整列表,可以查看版本说明

欢迎您通过我们的官方微信分享您的意见与建议,请告诉我们您的看法!

Make sure to visit the What’s New page and watch an overview video.
Get IntelliJ IDEA 2019.3 and enjoy an even more stable version of your favorite Java IDE!

祝您开发愉快!

原文发表于2019年11月28日,作者Zlata Kalyuzhnaya

Discover more

网络研讨会视频:快速上手,使用 Kotlin 把支付宝小程序装进自己的 App

写一个 Android App 或许不难,但企业对于移动应用的要求愈来愈高,不只要求开发速度、稳定度、质量等,甚至希望能具备动态扩展的架构设计、在 App 中自启动小程序。面向这些需求,若是有好的开发工具及平台的支持,将可以大大降低开发及运维的成本。本次网络研讨会特别邀请到支付宝高级无线开发工程师温盛章为大家演示用 Kotlin 开发移动应用,并集成 mPaaS 让 App 具备小程序能力。 (本次视频已同步发表至 B 站) 主題分享 本次分享共有三个关键字: Kotlin 、 小程序 、 mPaaS 。温盛章首先从用户、开发、技术、平台等四大视角,向大家说明小程序是什么?简单来说,小程序就是一种拥有完整生命周期、应用间相互隔离、独立运行于宿主应用内的应用。而小程序从工作型 App、平台型 App、超级 App 到新阶段一路的演化历程,目前已经可以有接近 Native 的体验和顺畅、也可以有 H5 的快捷发布的优势。 对小程序有概念后,温盛章就以 Android Studio 演示如何在一个 Mobile App 里,以 Kotlin 撰写 Mobile App 的代码,并接上 mPaaS 平台,让 App 有自启动小程序的能力。要接入 mPaaS,首先需在 Android Studio 里安装 mPaaS 插件,并到阿里云的 mPaaS 后台创建一个新建用。接着,在 Andro

网络研讨会视频:重构还是重写?聊聊 Java 代码臭味与重构技巧

在重构一书里,将有问题的代码称作代码臭味(Code Smells,有些翻译成”代码异味”、”代码坏味道”),表示这份代码可能有设计上的问题、或是因为写得太凌乱而难以维护。总得来说,这份代码需要通过重构来改善。这样的场景往往是许多开发者的每日工作,因此,判定一位开发者的等级,往往就是看他的重构技巧是否熟练。本次网路研讨会特别邀请到 Odd-e 敏捷教练张博超(Jackson)为大家演示如何用 IntelliJ IDEA 的重构功能来改善 Java 代码臭味。 (本次视频已同步发表至 B 站) 主題分享 在本次的分享里,张博超先用一个日常工作的场景给大家举了个例子:我们在工作前可能会先收拾一下桌子、重启电脑、提前打开软件、在昨天写的代码上加注释,这些动作代表很多情况下,人会有直觉去做改善措施,这些改善措施的背后都会对应一个需要解决的问题。写代码也是类似的,每当我们说要改善代码前,需要先想清楚这个改善的目标是什么?是要解决什么问题?同时,我们也要思考这个改善的作法是不是能真正的解决问题? 为了让大家具体体现重构的过程,张博超以一个计算预算的代码为例子,实际以 IntelliJ IDEA 演示该怎么综合运用提取变量、提取方法、提取类、引入参数对象、修改构造函数等重构功能安全地修改代码,将一个原本高达 30 行、充满原始类型迷恋(Primitives Obsession)、过分亲密(In