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!
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.
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.
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.
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.
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
--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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
There is no more need for working around opening
.hprof files! To open
any file of these types quickly, drag and drop it in the editor, open it with File |
double-click it in the Project view.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
We’ve significantly improved code insight in various cases, including when you want to
reference external definitions with the
$ref keyword. As another important
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.
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.
IntelliJ IDEA 2020.3 introduces completion for predefined methods that you use when creating
repository interfaces. We’ve also added support for the Micronaut
helps when creating customized queries. With this annotation, you can use the JPQL language
for code fragments.
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.
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.
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.
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.
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!
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.
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.
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.
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.
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.
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.
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.
There are other useful updates you can use in your daily routine: