IntelliJ IDEA 2020.1 EAP: Java 14, improvements for Git and UI, and much more

Today we are happy to open the Early Access Program for the next major release of IntelliJ IDEA – v2020.1. We are kicking off the new decade with a host of new improvements, check out all the details in this post!

As always, you can download the new EAP from our website, get it from our free Toolbox App, or update using snaps if you’re an Ubuntu user.

blog_2020.1_eap_1

Let’s get right to the point! Here’s what’s new in the IntelliJ IDEA 2020.1 EAP:

JDK

Download JDK from the IDE

Imagine you are starting a new preconfigured project (Spring/Maven/Gradle, etc.) or a plain, simple Java project and you need to add a new JDK. With IntelliJ IDEA 2020.1 this will no longer be such a chore, as you can now download, extract, and set up a JDK right from the New Project wizard:

Once you have configured and created an application, the IDE will automatically download and set up the chosen Java version, allowing you to jump straight into coding without having to switch contexts.

Similarly, when you open an existing project, IntelliJ IDEA automatically checks whether there is already a suitable JDK available on your machine. If not, the IDE will suggest downloading one:

Note that you can now also download and configure Java when you’re setting up a Project Structure (File | Project Structure) in an existing project, and you can configure the Gradle JDK (Preferences / Settings | Build, Execution, Deployment | Build Tools | Gradle).

Support for Java 14

The IntelliJ IDEA 2020.1 EAP adds support for Java 14, which is also still in its Early Access stages and is planned for public release in March 2020.

This first EAP build allows you to play around with some of the new Java features, such as Records and Pattern Matching.

Records

With this first EAP, you can create Java Records right from the New Java Class popup (Cmd+N/Ctrl+N from the Project tool window) just like you would for usual classes and interfaces:

In addition to the code insight features, such as code autocompletion and navigation, the IDE allows you to quickly generate a canonical or custom constructor and it will notify you about any existing errors:

Note that support for Records is still a work in progress, and some of the features, such as the code formatter, refactorings, and quick documentation will be added later in future EAP builds.

Pattern Matching

IntelliJ IDEA now also supports pattern matching of instanceof that will be included in Java 14. In this first EAP build, the IDE already provides full code insight support including inline renaming (Refactor | Rename or Shift+F6) of pattern variables. There’s also a new inspection and a quick-fix that enables you to quickly simplify the verbose instanceof-and-cast idioms with the new and concise pattern variables:

Editor

Quick Type Definition

With v2020.1, not only can you quickly view the definition of a variable, field, method, or any other symbol (View | Quick Definition), but you can also quickly view its type definition. To do so, put the caret on the desired symbol, then go to View | Quick Type Definition:

The IDE doesn’t have a default keyboard shortcut for this action yet, but you can manually set one up in the Preferences / Settings | Keymap.

Improved Navigation Bar

The Navigation Bar (View | Appearance | Navigation Bar) now displays methods in Java classes and interfaces, making it much easier to navigate between them:

And as a minor improvement, Quick Documentation now appears on mouseover by default. You can disable this option in Preferences / Settings | Editor | General.

UI improvements

JetBrains Mono font by default

IntelliJ IDEA and other IntelliJ-based IDEs are now using the brand new JetBrains Mono font (Preferences / Settings | Editor | Font) as their default. Learn all the details about this new beautiful typeface from the dedicated resource on our website.

Unified IntelliJ Light theme

The default light theme is now unified across all the different operating systems and is called “IntelliJ Light”. If the new theme doesn’t take your fancy, you can quickly roll back to the older default one for your OS: go to View | Quick Switch Scheme | Theme, and choose the OS_NAME Light theme (e.g. macOS Light for Mac).

Git

Branches popup

  • The Branches popup now features an explicit search field that enables you to look for existing remote and local branches. Previously, you could find specific branches just by starting to type, but the absence of the explicit search field made this option unclear and rarely used.
  • The Refresh button has been reworked, so that you can now use it to update the existing remote branches.
  • Incoming (blue) and outgoing (green) commit indicators have been added to the status bar:

New “Interactively Rebase from Here” dialog

We have given Interactively Rebase from Here a substantial rework. This is a dialog that allows you to edit, combine, and remove your previous commits in order to make your commit history more linear and comprehensible.

To invoke this dialog, go to the Log tab of the Git tool window, select the oldest commit in the series of commits you want to edit, right-click it, and choose Interactively Rebase from Here:

And here’s what now opens in v2020.1:

Unlike the previous dialog, which was basically a list of available actions for the chosen commits, the new dialog is truly interactive. It features a nice graph that shows the actions you applied to each commit, it shows the commit details, and it allows you to see the diff and quickly reset the applied changes. Try it out and let us know what you think!

Other improvements for Git:

  • The Version Control tool window is now called the Git tool window, or Subversion/Mercurial/Perforce if you are using any of these instead of Git.
  • When you check out a new project from Version Control, the IDE will assist you with downloading and setting Git up if you don’t already have it on your machine.

Build tools

Maven and Gradle importing updates

v2020.1 makes the importing of Maven and Gradle changes less obtrusive. First of all, we’ve removed the annoying auto-import that used to always trigger, as well as the balloon that used to constantly show up and suggest importing updates before you’d finished updating the script. Instead, there’s now a floating notification in the upper-right part of the editor that will prompt you to load the changes:

You can now also use the shortcuts Ctrl+Shift+O for Windows and Linux /Shift+Cmd+I for Mac to load the changes.

If there are any external changes to the build scripts, such as VCS updates or edits made outside of the IDE, IntelliJ IDEA will reload the related projects automatically.

We’ve also removed the option to enable/disable auto-import from the settings, as the improvements mentioned above have made it redundant.

JetBrains Runtime

JBR8 End of Support

With v2020.1 EAP we are fully moving to JetBrains Runtime 11 (JBR11), and will no longer distribute builds with JetBrains Runtime 8 (JBR8). Please note that all the IntelliJ IDEA 2020.1 updates both in the IDE and the Toolbox App are coming with JBR11.

Please note that there’s a known issue with patch-updating JDK11 builds on 32-bit Windows and Linux machines, which should be fixed in one of the upcoming EAP builds: IDEA-229379.

Ultimate

Code insight for R2DBC, reactive SQL clients for Micronaut and Quarkus, and other 3rd-party libraries

IntelliJ IDEA has been long providing language injection for editing SQL strings used with the standard JPA and JDBC queries, but it used to treat 3rd-party SQL libraries as usual strings. Starting with v2020.1 the IDE automatically injects SQL fragments for popular 3rd-party libraries, such as R2DBC, providing code autocompletion and navigation for SQL statements and fields:

Similarly, we added full code insight support for reactive SQL clients (Vert.x SQL Clients) in Micronaut and Quarkus:

The list of supported libraries includes Apache DbUtils, Apache Spark SQL, R2DBC, Vert.x SQL Clients, Fluent JDBC, JDBI, Sql2o, Jodd DbQuery, jasync-sql, and jOOQ.

URL code completion for Android Volley

IntelliJ IDEA now supports the Android Volley library, and provides code autocompletion for URL path references, as well as code navigation to the related resources. For instance, if you are using Spring Boot as a backend for your Android app, the IDE will suggest existing URL paths in the autocompletion list (Ctrl+Space), and will enable you to navigate to the related controller or endpoint:

Check out the full release notes for the exact list of closed tickets.

Give this first EAP build a thorough try, and please share your feedback with us here in the comments, in our issue tracker, or on Twitter.

That is it for today. We’ll keep publishing the EAP builds for v2020.1 with more fixes and improvements each week. Stay tuned!

Happy Developing!

This entry was posted in EAP Releases and tagged , . Bookmark the permalink.

46 Responses to IntelliJ IDEA 2020.1 EAP: Java 14, improvements for Git and UI, and much more

  1. Chinese user says:

    Could you please add some CDN support for jetbrains maven repository in China, because the jdk, jbr and jetbrains SDK download speed is really terrible!

    • Artem Sarkisov says:

      Could you specify how you download all the artefacts? JB’s resources are already distributed via CDN.

      • Shiro Hama says:

        Hey, bro. I use the offical version and slow download question still happen..
        We still have to use VPN to download plugins for IDE… (Crying) .

  2. Mark says:

    One thing you neglected to mention is that if you’re using an in-house wrapper for SQL queries, it’s easy to have IntelliJ recognize that as well.

  3. Edoardo Luppi says:

    I’m really looking forward to the JRE/JDK 11 as the default environment for IDEA! I’d like to start developing plugins targeting release 11 too. Anyway, I think 2020 will be a positive year! Congrats.

  4. Sebo Molnár says:

    Are we able to disable “Load changes” button and rather leave it to be automatically done when there are some new changes?

    • Artem Sarkisov says:

      No, IntelliJ IDEA will no longer load manual changes automatically to avoid importing build scripts in inconsistent state (e.g., not all dependencies are added etc.).

      But it will load automatically changes coming from VCS updates, branch switches and in other situations, when build scripts (pom.xml’s) are expected to be correct

  5. Maccimo says:

    Lowercase ‘u’ and ‘v’ in new font are indistinguishable making whole font unusable.

  6. PaulH says:

    @Maccimo – you may want to check your setup, because those two letters are clearly distinguishable even at type sizes much smaller than would typically be used.

  7. Suresh says:

    Awesome updates as usual.. Also, what happened to the dark toolbar on mac? It seems I can’t enable it back.

  8. Maccimo says:

    @PaulH
    Problems visible even on screenshots in this article.
    Letter ‘u’ in new branded font has no vertical line at the right bottom and this fact make it harder to distinguish from ‘v’. Uppercase letters is big enough to have no such problem.

    • Tagir Valeev says:

      The ‘u’ shape was the first issue I reported when I started using the new font. However, after a few days, I get used to it, and now I like it. I’m using JB Mono for several months already and I don’t remember I ever mixed ‘u’ and ‘v’

  9. Lőrinc says:

    Love it! :)

  10. Sebastian says:

    Hi,
    unfortunately, 2020.1 EAP 1 (re-)introduced the errors using play!framework (v1.x) that were present in all 2019.3 EAP builds [1]. This got fixed in the final 2019.3 though.

    It looks like it’s the same problem:

    Reference element is not the same element for which references were queried

    java.lang.RuntimeException: Element: com.intellij.psi.impl.source.PsiPlainTextFileImpl; reference: com.intellij.play.references.PlayControllerActionPsiReferenceProvider$ControllerPsiReference; reference element: com.intellij.psi.impl.source.tree.PsiPlainTextImpl
    at com.intellij.psi.PsiReferenceServiceImpl.assertReferencesHaveSameElement(PsiReferenceServiceImpl.java:47)
    at com.intellij.psi.PsiReferenceServiceImpl.getReferences(PsiReferenceServiceImpl.java:23)
    at com.intellij.psi.search.SingleTargetRequestResultProcessor.processTextOccurrence(SingleTargetRequestResultProcessor.java:32)
    […]

    I reported it here: [2].

    Refs:
    [1]: https://blog.jetbrains.com/idea/2019/10/whats-new-in-intellij-idea-2019-3-eap8/#comment-505465

    [2]: https://ea.jetbrains.com/browser/ea_reports/5380442

  11. Nemo says:

    I just upgraded to EAP version. It gets stuck on splash screen after starting it on my Windows 10 machine. On Linux I got at least the EAP Licence agreement popup and after approving it the progress bar appeared on the splash screen. After that IntelliJ IDEA started OK. Any idea why can’t I run it on Windows? Any logs that I can look at?

  12. Nemo says:

    Sadly I can’t start IntelliJ IDEA after upgrading to this EAP. It gets stuck on the splash screen on my Windows box. On linux it asks for EAP licence agreement (not sure why again?) and after clicking the popup out it starts up. Any idea why? Any logs that I can look at?

  13. Tom Prior says:

    These updates are brilliant! Thanks a million. One minor thing – there used to be a preference to set the cursor blink rate and setting it to 0 meant that the cursor didn’t blink anymore. I can’t seem to find this preference in 2020.1.
    Thanks.

  14. Dario says:

    I see polishing in many locations; it looks like this could be a great release! I’m also loving the new Git interactive rebase dialog, but it seems to be missing the squash option. Also, as already mentioned somewhere, selecting multiple commits and choosing fixup doesn’t seem to honor all of them. Keep up the good work!

    • Dmitriy Smirnov says:

      Thanks for the kind words!

      > it seems to be missing the squash option

      Squash and Fixup are similar actions, the difference is in commit-message. So we wanted to make a combined action that will squash/fixup depending on the user choice but it has not been implemented yet. So the option to squash will be back in future updates

      > Selecting multiple commits and choosing fixup doesn’t seem to honor all of them

      Known issue – https://youtrack.jetbrains.com/issue/IDEA-231025

  15. Pierre says:

    I’m very confused about the new Interactivly Rebase dialog.
    normally we squash all our commits before we merge a feature branch.

    but with the new dialog i don’t know how to squash all my commits into one :-/

    • Dmitriy Smirnov says:

      Squash and Fixup are similar actions, the difference is in commit-message. So we wanted to make a combined action that will squash/fixup depending on the user choice but it has not been implemented yet. So the option to squash will be back in future updates

  16. Ward Lootens says:

    Previously, the _Local Changes_ were displayed in a separate tab on the _Version Control_ tool (now _Git_).
    Now, they seem to be shown in a dedicated _Commit tool_, which is confusting me.
    Any way this could be changed?

      • Pierre Liebsch says:

        just go to settings -> version control -> commit dialog und uncheck the first checkbox. then you have the old commit dialog

        • Ward Lootens says:

          Nope, that doesn’t fix the issue I describe.
          There are still 2 tool tabs
          – Git (with branches, git log etc…)
          – Commit (with local changes and shelf)

          IMHO, these are very related

    • Sergei Morozov says:

      This is indeed really weird to have the local changes displayed in a different window than the rest of the Git-related info. In the end, those local changes are calculated against the last _Git commit_.

      I’d rather see the Local Changes tab back in the Git window than have to deal with two windows for the same purpose (version control).

    • Sorin Jucovschi says:

      I agree with what Ward is saying. I would prefer having the Local Changes tab inside the Git or Subversion one (I’m currently working with both SCMs).
      Can we vote on this? Is there a reason for splitting these two? Is is because of the new Git and Subversion panels?

      You guys are doing a fantastic job! I would never consider using any other IDE than IntelliJ :)

    • Martin says:

      I agree with Ward. I opt for the well known ‘Local changes’ tab inside ‘Versions control’ or ‘Git’. Its extremly usefull to see the local changes without having to open another window.

      • Pierre says:

        Luckily in the newest 2020.1 version it’s again in the git/vcs window.
        Not really happy that the diff window opens automatically, but at least it’s back where it has to be.

    • Suresh G says:

      Yes, moving local git changes to a separate commit window is really confusing at first. I was expecting the same under the new Git tab. It would be great if both can merged under the same tab.

    • Peter says:

      +1
      Had to google and find this thread to even find my local changes (in the new commit tab under View -> Tool Windows -> Commit). Please move it back to the Git Tab. A separate Tab has no benefit to me at all.
      The automatically opening diff window is also very confusing and does not appear always, sometimes only after IDEA loses focus. I thought its the usual popup and closed IDEA instead ^^

  17. Daniele says:

    I’ve had problems since the first build of 2020.1.
    In particular, once it has finished indexing the editor it is unusable due to a very high input lag (I use windows). Is there anything I can do?

  18. Martin Jones says:

    Love the improvements, well done.
    I found a few blocker issues for our plugin. Will these be fixed in the actual release?

    1) IDEA freezes and needs to be killed or wait up to 20 minutes. It sort of kills my productivity. https://youtrack.jetbrains.com/issue/IDEA-235635

    2) Support for local/remote tomcat is broken https://youtrack.jetbrains.com/issue/IDEA-232967

    3) The merged open/import action on welcome screen completely broke our plugin import. The custom import provider doesn’t show up. Our projects can be 3GB of complicated directory structure. Is this a bug or do we need to redesign our plugin?
    https://youtrack.jetbrains.com/issue/IDEA-236073 might need reopen.

    4) Also automated recursive scanning of subdirectories is not a good idea. i.e. Eclipse importer seems to find all eclipse modules. This will cause performance hit on 3GB projects. Can we turn that off in custom plugins, perhaps?

    5) custom plugin collision break IDEA. Will this issue find its way to this release? https://youtrack.jetbrains.com/issue/IDEA-231230

Leave a Reply

Your email address will not be published. Required fields are marked *