What’s New in IntelliJ IDEA 2020.3

IntelliJ IDEA 2020.3 adds interactive hints and inline watches in the debugger, improves support for Java 15, and introduces support for Git staging, along with a variety of other features. Continue reading to learn about them all!

User experience

New Welcome screen

New Welcome screen

The IntelliJ IDEA welcome screen has been redesigned. The Initial wizard has been replaced with a quick-access screen containing four tabs: Projects for managing your projects, Customize for setting up the IDE interface, Plugins for plugin installation, and Learn IntelliJ IDEA for access to help and learning resources.

Learn IntelliJ IDEA

Learn IntelliJ IDEA

Open the Learn IntelliJ IDEA tab right from the Welcome screen. Here you can find interactive lessons and useful Help links. Click Start Learning to study various IDE features step by step in a real environment. Follow the instructions in the Learn view to test your new skills on actual coding samples.

IDE theme synced with OS settings

IDE theme synced with OS settings

IntelliJ IDEA can now synchronize its theme with your OS theme. To enable this feature, go to Settings / Preferences | Appearance & Behavior | Appearance and tick the Sync with OS checkbox. Click the gear icon next to Sync with OS to select your preferred theme.

Reader mode

Reader mode

Read-only files and files from external libraries are now opened by default in Reader mode. In this mode, comments look like formatted text and font ligatures are enabled to help make the code more readable to users. You can customize Reader mode settings in Settings / Preferences | Editor | Reader Mode.

LightEdit updates

LightEdit improvements

In IntelliJ IDEA 2020.3 we've improved the UX for LightEdit mode. To open files in LightEdit mode from the command line, you now type -e (--edit) followed by the name of the file you want to open, or omit the filename to reopen your previous session. A new status bar in the LightEdit window provides access to the full set of IDE features. If you want to learn more about LightEdit mode updates, read this blog post.

Better grammar checker

Better spelling and grammar checkers

Now, when you press Alt+Enter, the IDE invokes suggestions to correct your grammar or spelling. What’s more, we started using a new version of the LanguageTool grammar checking engine, which improves text reviews in English and adds support for 10+ more languages.

Search everywhere commit hashes

Search Everywhere updates

We've added a new Git tab to the Search Everywhere dialog. You can now find commit hashes and messages, tags, and branches in the Search Everywhere dialog. You can also perform simple mathematical calculations in the search field.

Preview tab

Preview tab

You can now open a file in a preview tab with a single click. When you open a file in a preview tab, its name is displayed in italic. If you start editing this file, it will cease to be a preview and will become an ordinary file. If you single-click another file to open it in preview mode, it will appear in the same tab, replacing the previously opened one. To enable this feature, click the gear icon in the Project view and select Enable Preview Tab.

Linux emoji picker

Linux emoji picker

In v2020.3, we’ve added an emoji picker for Linux 🥳. To open the emoji picker, press Ctrl+Alt+; . You can filter emojis by category, change their skin tone, and search for emoji by name. The emoji picker fully supports keyboard navigation.

Update JDK from IDE

Update JDK from inside the IDE

Starting from v2020.3, it is possible to migrate to the latest JDK from a popup that appears whenever an update is available. You can choose whether you want to install it or skip it.

Editor

New Extract method layout

New Extract method layout

We’ve made it easier to extract Java methods – just press ⌥⌘M on macOS or Ctrl+Alt+M on Windows or Linux, or select Refactor / Extract / Introduce / Method… and the IDE will do the extraction right away.

Rename refactoring updated

More intuitive access to Rename settings

With the new Rename preferences that appear in an inlay hint, it is now possible to select whether you want to rename occurrences in comments and string literals or in printable text. To invoke this hint, press ⇧F6 on macOS or Shift+F6 on Windows and Linux and then press Tab. You can change the shortcut for Show Options Popup for In-place Refactoring in Settings / Preferences | Keymap.

Drag and drop tabs

Drag and drop tabs

If you want to have several tabs open while working on a project, you can now drag and drop file tabs to split the editor either horizontally or vertically. We’ve also introduced the Open in Right Split action that splits the editor vertically upon opening your file. Invoke the action from the Project view or other navigation popups, such as Recent Files, Search Everywhere, and Navbar.

Pinned tabs

Pinned tabs improvements

In v2020.3 the new pin icon is shown for pinned tabs. When you click on it, you unpin the file. You can also pin and unpin your tabs by dragging and dropping them over other pinned or unpinned files. If you tend to open a lot of tabs, you can keep all your pinned tabs in one row. To do this, go to Settings / Preferences | Editor | General | Editor Tabs and tick the Show pinned tabs in a separate row checkbox.

Markdown improvements

Improved Markdown editing and preview

The Markdown tool now has a better preview UI and improved UX. You can customize Markdown format in Settings / Preferences | Editor | Code Style | Markdown. Press ⌘+Alt+L on macOS or Ctrl+Alt+L on Windows or Linux to apply formatting. The Auto-Scroll Preview button in the top-right corner of the editor allows you to sync scrolling of the preview pane and the editor. We’ve also added support for Mermaid.js.

Associate file types

Setting IntelliJ IDEA as the default application for opening files

Now you can set IntelliJ IDEA as a default application to open files. In Preferences | Settings / Editor / File Types, click the Associate file types with IntelliJ IDEA… button. In the dialog that opens, select the extensions for files you want to open in your IDE. If you use macOS, you’ll need to restart your computer to apply these changes.

Multiple files per template

Multiple files per template

In Preferences / Settings | Editor | File and Code Templates, it is now possible to add a template that creates several files. First, click + to create a new template. To add another file to it, click the Create Child Template File icon next to the +. In the File name field, you can enter a pattern to generate a file name and a path using variables listed in the Description section.

Debugger

Debugger interactive hints

Interactive hints

When your application is running in debug mode, you can click on variables to get inline hints that contain related fields that you can change the values of. Click Create Renderer inside this new inline hint to open a dialog where you will be able to configure the display of inline values in all debugger views.

Debugger inline watches

Inline watches

We’ve added a new type of watch expressions which will be associated with a particular context and shown right inside the editor. To create these new watch expressions, you can click Add as Inline Watch in the inline hint popup, select Add Inline Watch from the context menu, or right-click on a variable in the editor. You can manage your inline watches in a new Inline Watches node in the Variables tab of the Debug tool window.

Showing referring objects in the debugger

Basic memory profiling in Java debugger

Basic profiling options are now available while the debugger is running. Invoke the new profiling features from the context menu of the Debug tool window. The first is Show referring objects, which finds the shortest path from an object to the GC roots. The second is Calculate retained size, which calculates the retained size of an object and shows you its retained set.

Improved Gradle debugging

Better debugging for Gradle

Now only one tab opens per debugging session for a Gradle task. It contains Frames and Variables, as well as the Console output. Debugger controls now work correctly. If you want to roll back to the previously used debugging logic, clear the Reuse Gradle debug session for forked processes checkbox on the Edit configurations… screen.

Profiler

Attach Profiler to process

Updated Profiler tool window Ultimate

In the redesigned Profiler tool window, you can attach the profiler to a running application. In the list of all running Java processes, press Enter to invoke Attach Profiler to a Process and select which integrated tool you want to use. In the Recent Snapshot area, you can quickly access any previously created snapshots.

Flame graph search

Flame graph search Ultimate

The flame graph search is now more user-friendly, featuring a visible search field, up/down arrows for fast navigation, a filter that allows you to search in the whole flame graph, or just in a specific subtree.

Jfr and hprof drag and drop

Easy access to .jfr and .hprof Ultimate

There is no more need for working around opening .jfr and .hprof files! To open any file of these types quickly, drag and drop it in the editor, open it with File | Open, or double-click it in the Project view.

Support for local Maven and Tomcat Ultimate

It is now possible to profile your local Maven and Tomcat run configurations, the same way as you would any other run configuration. Right-click the item that you want to profile and select the necessary profiling option: CPU, Allocation, or Java Flight Recorder.

Version control

Git stage support

Git stage support

You can now stage changes directly from your IDE. To enable this feature, go to Settings / Preferences | Version Control | Git and tick the Enable staging area checkbox. Click the + icon to add your files to the new Staged node in the Commit view. You can also stage changes right from the gutter or in the Diff view. To learn more, read our blog post.

Updated VCS menu

Rearranged VCS menu

The VCS menu is now named according to the version control system that you are currently using. We’ve made the menu more concise, removing all but the most useful actions for versioning your project. If your project only uses Git, your VCS menu will look like on the image above.

Improved branches

Improved branches

When you create new branches, the IDE automatically corrects unaccepted symbols in branch names. We’ve reworked the context menu for the current branch to show the related actions. For remote branches, we’ve renamed the Merge into Current and Rebase Current onto Selected actions as Pull into Current Using Merge and Pull into Current Using Rebase, respectively.

Run Configurations

Updated Run Configurations

Updated Run/Debug configurations

We’ve rearranged Run/Debug Configurations to make it neater, with the most frequently used settings now located in one screen. The obligatory fields contain in-field labels and are arranged in the same order as in the command-line. If you need to configure other parameters, click Modify options.

Share run config templates

Store and share run/debug configuration templates

In IntelliJ IDEA 2020.3, you can store run configuration templates as XML files and then share them with teammates via Git or another VCS. To enable the features, go to Edit Configurations …, expand the Templates node, select a configuration template, select the Store as project file checkbox, and define a path for storing this configuration template.

Collaborative development

Code With Me EAP

IntelliJ IDEA 2020.3 supports Code With Me (EAP) – a new service for collaborative development and pair programming. Code With Me enables you to share the currently opened project in your IDE with others, and work on it together in real-time. Get it from the plugin marketplace (Preferences / Settings | Plugins | Marketplace). Check out these posts to learn more about Code With Me.

Java

Convert Records to Classes

Conversion of records

We’ve added a new intention action that allows you to convert records to classes. It can be useful when you want to downgrade your codebase. You can read about when and how to use records in this blog post.

Support for Sealed Classes

Full support for sealed classes

In this release, we’ve added completion, code insight, and refactorings for sealed classes. When you use the sealed modifier, you declare a class as a sealed class that allows you to define which other classes can extend it and which classes to prevent from being extended. The subclasses can either be final, non-sealed, or sealed. For some examples of how this can be used, read this blog post.

Machine Learning Code Completion

Machine-learning-based sorting in code completion

Code completion suggestions have become smarter and more context-dependent, thanks to new machine learning technology that sorts the suggestions better and displays the most relevant first. To see how the new ranking system changes the order of suggestions, go to Settings / Preferences | Editor | General | Code Completion and tick the Mark position changes in the completion popup checkbox.

Shebang support

Shebang (#!) support

If your files use a Shebang mechanism, IntelliJ IDEA automatically identifies this and allows you to open them correctly and use code insight. Highlighting for files with shebang (#!) also works.

Delete comment inspection

New Inspections

In IntelliJ IDEA 2020.3 we’ve introduced new inspections that can help you improve your code. One of the most important inspections is Commented out code which lets you either delete or uncomment lines that have been commented out. You can learn more about the other new inspections in IntelliJ IDEA 2020.3 in this blog post.

Better code completion

Better code completion

When you create a class from scratch, completion now offers class, interface, enum, or record after the top-level Public declaration. If you use the String.toUpperCase or String.toLowerCase methods, you are now prompted to use Locale.ROOT. When you are about to call String.getBytes(), the IDE suggests using the UTF_8 charset.

Kotlin

New types of inline refactorings

Cross-language conversion is now possible, meaning you can inline Kotlin elements from Java. You can also inline-refactor the also, let, run, apply, and with scope functions. We’ve improved the inlining of lambda expressions for the IDE to analyze their syntax more thoroughly and format them correctly.

Structural search and replace

Structural search and replace

We’ve introduced support for structural search and replace (SSR) actions for Kotlin. You can find and replace code patterns, taking the syntax and semantics of the source code into account. Filters for variables allow you to narrow down your search.

New infrastructure

The Kotlin IDE plugin release cycle is now synced with the IntelliJ IDEA release cycle. We’ve also moved the Kotlin IDE plugin to a new repo that is combined with the IntelliJ IDEA codebase to minimize the time it takes us to pick up platform changes.

Frameworks and technologies

Reworked Endpoints tool window

Reworked Endpoints tool window Ultimate

In this release, we've significantly improved the Endpoints tool window which shows both client and server APIs for HTTP and WebSocket protocols. It features a more convenient display of endpoints grouped by module with an option to make the list more compact. You can use comprehensive search with filters, multiple search parameters, and completion. You can read documentation for each endpoint in a new tab. If endpoints have associated URLs, you can see an Open API representation of them and access an ad hoc HTTP client.

cURL conversion

cURL conversion Ultimate

You can now export an HTTP request to cURL by pressing Alt+Enter in the HTTP request editor and selecting the Convert to cURL and copy to clipboard option.

Better URL completion

Better URL completion Ultimate

URL completion is now more informative, with framework icons, HTTP methods, and source locations of the classes or files in which you declared the endpoint. Deprecated URLs are displayed with strikethrough formatting.

URL Inlay Hints

URL Inlay Hints Ultimate

We’ve added fast access to some key actions for URLs. Click the globe icon next to the URL to access them. These actions are currently available for the Spring MVC, WebFlux, Feign Client, JAX-RS, Micronaut, and Retrofit frameworks.

Spring Security completion in Kotlin

Spring updates Ultimate

We now support code insight for Spring MVC Functional Routing, RestOperations, Spring WebTestClient, and Spring Reactive WebClient. We also display endpoints declared with them. We’ve added code completion and navigation for Kotlin Spring Security projects.

HTTP request conversion

HTTP request conversion Ultimate

If you still use HTTP requests in the old HTTP client format, you can easily convert them by clicking Convert request to the new format at the top of an open request. Other ways to do it are via the context menu in the Project view or from the HTTP request editor.

Swagger updates

Swagger updates Ultimate

We’ve significantly improved code insight in various cases, including when you want to reference external definitions with the $ref keyword. As another important update, we’ve added Swagger Hub support for you to get both public and private specifications from Swagger Hub and open them in the Endpoints tool window. Another nice feature is that the Swagger UI now syncs with the Darcula theme.

Quarkus configurations

Quarkus and Micronaut run configurations Ultimate

Your new Quarkus and Micronaut projects have automatically created run configurations, which means that you can run and debug your application right away. If you decide to change the Quarkus settings in Edit Configurations, the Environment section will feature only the settings applicable to Gradle or Maven, depending on which of these you are using to build your project.

@Query completion

Code completion in @Query annotation for Micronaut Data Ultimate

IntelliJ IDEA 2020.3 introduces completion for predefined methods that you use when creating repository interfaces. We’ve also added support for the Micronaut @Query annotation that helps when creating customized queries. With this annotation, you can use the JPQL language for code fragments.

Scala

Parallel compilation

Parallel Compilation

The Scala Compile Server now compiles independent modules in parallel. We've adjusted the default VM options to support up to 4 compilation threads by default, which can speed up compilation a great deal. If your machine has lots of CPU cores and a lot of RAM, feel free to tweak the default values to improve compilation times even further.

Compilation charts

Compilation charts

To increase the efficiency of parallel compilation, you may want to optimize the structure of your project modules and the VM options of the Compile Server. We've added Compilation Charts to help you with this. Now you can tell at a glance when there is potential for optimization. For example, a chart can help you identify modules that are acting as bottlenecks, opportunities to increase the number of threads, and cases when the maximum heap size needs to be tweaked. With faster compilation and dynamic charts to hold your attention, the "Compiling" comic is now a thing of the past.

Enhanced Package Prefixes

The Scala plugin can now combine IntelliJ IDEA’s package prefixes with Scala’s chained package clauses and relative imports. Although each of these features is rather obscure, instead of exponentially increasing the level of obscurity, this combination provides an intuitive and internally consistent system (more info). You no longer have to put up with chains of empty directories or repeat the same package prefix over and over again. You can keep both your directories and packages neat and tidy.

MUnit Support

The Scala plugin already supports JUnit, ScalaTest, uTest, and Specs2. It's about time we added another entry to this list. Support for MUnit is now available with all the usual advantages.

Scala 3 improvements

Scala 3 Improvements

The IntelliJ Scala plugin has already included support for the upcoming Scala 3 for quite a while and we’re working hard to keep up with all the new updates. Particularly, the Scala plugin now understands the new syntax for main methods. Engineering Hello Worlds has never been easier!

JavaScript

Integrated TS problems view

Integrated TypeScript and Problems tool windows Ultimate

We’ve integrated the TypeScript language service into the Problems tool window and removed the TypeScript tool window. We made this change to make it easier to review the problems in your code from one place. We’ve also moved the actions previously available within the TypeScript tool window to a dedicated widget on the status bar.

Create a React component from usage

Create a React component from usage Ultimate

Have an unresolved React component in your code? Place the caret at it, press Alt+Enter, select Create class/function component from the list, and the IDE will create the relevant code construct for you.

Take a look at What’s New in WebStorm to learn about the other JavaScript improvements that are also available in IntelliJ IDEA 2020.3.

Kubernetes

Kubernetes download logs

Download logs Ultimate

You can now download logs to your local machine – just click the Download Log button in the left pane of the Services tool window. By default, your pods will be saved to Scratches and Consoles | Kubernetes Files | <context> | <namespace> | pods, but you can change the settings in the Pod Logs section of Settings / Preferences | Build, Execution, Deployment | Kubernetes.

Kubernetes run shell

Open Console and Run Shell Ultimate

Two new actions have been added to the left pane of the Services tool window: Open Console for connecting containers that include consoles, and Run Shell for launching Shell for a pod container. Click the tools icon for quick access to the Pod Shell section of the settings.

Better URL completion

Load CRDs from Kubernetes Ultimate

It is now possible to automatically load CRD schemas from an active cluster. To do this, go to Preferences / Settings | Languages & Frameworks | Kubernetes and tick the Use API schema from an active cluster checkbox.

Database tools

SQL for MongoDB

SQL for MongoDB Ultimate

You can now use SQL to query MongoDB databases. IntelliJ IDEA 2020.3 supports SELECT queries with clauses such as JOIN, WHERE, GROUP BY, HAVING, ORDER BY, LIMIT, OFFSET, and all available MongoDB functions except map, reduce, filter, and let. If you want to learn more about SQL for MongoDB, read this blog post.

Couchbase support and new data extractors Ultimate

The IDE now supports the Couchbase Query service. We’ve also introduced two new extractors: One-Row that allows you to copy a column to a comma-separated string; and SQL-Insert-Multirow, which generates a single INSERT statement with multiple new rows to be inserted.

Other

There are other useful updates you can use in your daily routine:

  • The upcoming Maven 3.7.0 will feature new POMs with a simplified structure. IntelliJ IDEA 2020.3 already includes support for them.
  • The Lombok plugin is now built-in.
  • IntelliJ IDEA can download shared indexes for popular Maven libraries directly from JetBrains’ servers. If you develop plugins with an IntelliJ Platform SDK, shared indexes will be downloaded automatically.
  • We’ve updated the UI to look good in the macOS Big Sur.
  • A new keymap fully compatible with macOS system shortcuts is available in Preferences/Settings | Keymap.
  • We now use Git format by default for creating patches.