The update planned for this Autumn is now available for a public preview.
Give it a try and share your feedback.


Class-level watches

Now you can define watch expressions on the class level. These watches appear as extra fields of the class but their value is evaluated based on your expressions. An expression for class-level watches is defined in the context of the class.

Primitive type renderers

Now you can define custom Java Type Renderers for primitive types too, including arrays.

Memory view

With the help of the new JVM Debugger Memory View plugin you can explore objects in the JVM heap during a debug session.

When you’re stepping over the code, the Diff column shows you how the number of objects changes between debugger stops. A double click on a class name, opens a dialog with instances of this class.

Detecting JRE

Also, the debugger got better at detecting JREs used by the running application. Now, if the application uses a JRE different from the project JDK and you’re stepping into the JDK sources, the IDE will try to use another JDK configured in the IDE that better matches the running JRE version.

Version control

Log for Git & Mercurial

  • A dramatic speed improvement to searching, particularly for the Text, Author and Path filters.
  • Commit details have moved to the right, giving more space to the Log itself.
  • Commit messages in the table are now aligned and thus more readable.
  • Labels have been moved to the right side and are now displayed in a more elegant way.

Resolving conflicts

Now, the IDE is capable of resolving simple conflicts. When such a resolve is possible, the IDE shows a Resolve icon on the left side of the editor. Click the icon to have the conflict resolved by the IDE. To undo, press Ctrl+Z.

Syntax highlighting in the Diff and Merge dialogs

We've added the full syntax highlighting for non-local revisions in the Diff and Merge dialogs.

To get it working, we’re building the PSI tree rather than relying on lexer tokens. As a nice side-effect, you get the code navigation here as well.

Line markers in the Merge dialog

Also, we’ve added line markers to the Merge dialog to indicate actual changes to the base revision.

This makes it easier to understand what changes are actually going to be applied.

Undo commit

Now you can undo your last change (that you haven't yet pushed) in one click via the Log's context menu.

Restore and Delete tracked branch actions

Now, when you delete a local branch, you get a notification that lets you quickly undo it or delete the tracked remote branch too.

Sign-off commit

The Commit Changes dialog allows you to sign-off your commit. This may be a requirement for getting patches into some projects (including the Linux kernel).

Managing Git remotes

We’ve added a way to manage Git remotes: via VCSGitConfigure Remotes. Now you can add, edit and remove remotes for every repo in the project.

Note that adding a remote is also available in the Push dialog.


Parameter hints

The editor now shows parameter hints for literals and nulls used as method arguments. These hints make code much more readable.

If you find hints redundant for a certain method, you can tell the IDE not to show hints for this method. To disable hints completely, uncheck SettingsEditorGeneralAppearanceShow parameter name hints.

Semantic highlighting

Semantic highlighting, previously introduced in KDevelop and some other IDEs, is now available in IntelliJ IDEA. It extends the standard syntax highlighting with unique colors for each parameter and local variable.

To enable this feature, check SettingsEditorColors & FontsLanguage DefaultsSemantic highlighting.

User interface

Flat file icons

In this update we've reworked the file icons for a more flat design. While the new icons may look unusual, we believe they feel more sharp and less noisy.

Later, we may introduce flat icons to other parts of the IDE as well.

Recent tests

Now you can press Shift+Ctrl+; and get a popup with recent tests. The popup shows successful test configurations and failed individual tests. Press Enter to re-run the selected test or F4 to navigate to its declaration.

Fira Code font

Another font-related change, now affecting all platforms, is Fira Code which is now bundled with the IDE–allowing everyone to use Font Ligatures.

SF font for macOS

The macOS users will notice, that the default font of the UI (SettingsAppearance & BehaviorAppearanceUI Options) has changed to San Francisco (in particular SF NS Text), now the standard for the macOS platform.

Resource bundle editor

The Resource Bundle editor now tells which properties are unused in the project.

Find in path settings

The Find in Path dialog used to reset some of its settings if you called it from the Editor. This behaviour didn't seem convenient so we changed it. Now the dialog always preserves previous settings independently of where you call it from.


Refactoring to Java 8

Now, if you click Alt+Enter inside a non-trivial for-loop, the IDE will prompt you to replace it with an chain of the stream API calls. It supports count, flatMap, map, mapToInt, collect, filter, anyMatch, and other Stream methods. learn more

Also, when appropriate, the IDE will prompt you to replace certain code with Map.computeIfAbsent, Collections.removeIf and Collections.getOrDefault. learn more

Reporting nullability issues

Now, if you have a method with a @NotNull or Guava’s Objects.requireNonNull contract and the IDE notices that this contract is broken somewhere in the project, the IDE will notify you immediately about that–next to your parameter definition.

The corresponding inspection also allows you to navigate to those usages breaking your contract–so you can fix that.

Inlining local variables used only by return statements

The new inspection finds local variables used only by return statements, and provides a quick fix that inlines these variables–by replacing their assignments with return statements.

When the returned value can’t be inlined into return statement, the quick fix attempts to move the return statement as close to the computation of the returned value as possible.

learn more

Runtime assertions for not-null-annotated code

IntelliJ IDEA’s compiler (SettingsBuild, Execution, DeploymentCompiler) has an option to generate runtime assertions for the methods and parameters annotated with org.jetbrains.annotations.NotNull.

Starting now it supports non-JetBrains annotations as well–JSR-305 in particular.

learn more

Some intentions became quick-fixes

Unlike intention actions, inspection quick-fixes can be applied to many files at once. We've chosen several intentions that may work better as quick-fixes and converted them: Lambda can be replaced with anonymous class and Diamond can be replaced with explicit type arguments to name a few.

Lambdas in Structure view

Now if you press Ctrl+L in the Structure view, it'll show lambda expressions.

Unused declaration options

Now you can manage the Unused declaration inspection by choosing which members to report.

learn more

Meta-annotations hierarchy

The Type Hierarchy view now works for meta-annotations as well.


We’ve added actions that build Groovy files located in resource folders. They’re available via the main menu BuildGroovy Resources. Build Resources is incremental while Rebuild Resources builds from the scratch.


Delegate IDE build/run actions

We’ve added an option that delegates the native IntelliJ IDEA Build, Build Artifacts (both WAR and EAR) and Run actions to Gradle: SettingsBuild, Execution, DeploymentBuild ToolsGradleRunnerDelegate IDE build/run actions to gradle.

When this option is selected, all these actions are performed via corresponding Gradle tasks.

learn more

Composite builds

For Gradle 3.1 and higher, we've added support for Composite Builds, so you can substitute any of your project dependencies with another project.

All you have to is to attach the Gradle projects of these libraries via the Add button in the Gradle tool window (my-utils in our case), and then select Compose Build Configuration from the context menu for the original project.

learn more


We’ve added the support for Polyglot Maven, a set of Maven extensions that allows the POM file to be written in Groovy, Scala, Ruby and other languages.

While project import works for any language, coding assistance within POM files is available only for Groovy.

The Show Effective POM action works as usual and is especially useful if you want to see how Maven interprets the DSL.


Layout of the Spring Initializr has been reworked to fit more items and provide additional information. As a bonus, it now has the Search field.

Also, we’ve added support for meta-annotations based on @RequestMapping: e.g. @GetMapping, @PostMapping and custom user annotations.


The Grails view is back for Grails 3, as a tab inside of the Project tool window.

Artifacts are grouped by their type and reside outside of the sources folder.

All the Project tool window settings are applicable to the Grails view as well, including Flatten Packages.

Items under the Plugins node (always the last in the list) navigate to the corresponding GrailsPlugin class.



Now, when you set JavaScript version to Flow, the IDE reports problems in the files annotated with "// @flow" on the fly.

Make sure you've specified the path where Flow is installed in SettingsLanguages & FrameworksJavaScriptFlow.

ECMAScript 6

Convert var to const/let

Now, the IDE reports all var declarations and help replace them with let or const declarations, depending on value semantics.

Replace require() with import

For all require() calls, the IDE now provides a quick-fix that replaces them with import statements.

Destructuring assignments

We've added better support for destructuring assignments. You can now easily jump to the definition from the destructuring assignment and see quick documentation and parameter info when using a function.

Default exports

The Find usages and Show usages actions have been extended to support default-exported functions and classes.


Rename refactoring

When you rename a method that overrides or implements another method, the IDE now offers to rename the base method too.

If you choose to rename the current method only, the IDE makes sure to rename all methods that override the current one.

Optimizing imports

Also, we've added a new inspection that warns you when an import statement can be shortened, and provides a quick-fix to do that.

Angular 2

Templates coding assistance

Coding assistance within templates is now more precise and aware of available types.

Generating code

Also, now you can quickly generate components, directives, services, and other blueprints by pressing Alt+Ins and choosing Angular CLI from the Generate popup.



IntelliJ IDEA now offers a plugin for PostCSS. The plugin provides code completion, formatting, navigation, inspections, rename refactoring, etc.


Stylelint, a code quality tool for stylesheets is now integrated so that you can see errors reported by it right in the editor.


Blueprint mode

The new Blueprint mode in the Designer hides all of the visuals from views and shows only their outlines. You can choose to have it side by side with the Designer.

learn more

Constraint Layout

Constraint Layout is new layout manager which allows to create large and complex layouts with a flat view hierarchy. It’s similar to Relative Layout in that all views are laid out according to relationships between sibling views and the parent layout, but it’s more flexible and easier to use.

learn more

APK analyzer

The new APK Analyzer lets you drill into your APK to help you reduce your APK size, debug 64K method limit issues, view contents of Dex files and more.

Instant run

Many stability and reliability improvements to Instant Run. If you have previously disabled Instant Run, the Android team encourages you to re-enable it.


Editing multiple cells

Now you can edit several similar cells at once. Select several cells and start typing the value. If you need a cell editor (e.g. a Data Chooser), click Enter.

Submitting changes in bulk

Now changes made in the Table Editor are stored locally and submitted in bulk–via Ctrl+Enter.

Not submitted yet changes can be canceled via Ctrl+Z.

Coding assistance

Now if you use JOIN USING for Postgres, the IDE offers you only the field names common for both tables.

The INSERT statement completion offers you not only the list of all fields but also the list of fields which have no default value.

If a variable or parameter is not used within its scope, you'll get a warning.

You'll also get a warning if there is a different number of columns in queries used in set operators (UNION, INTERSECT and EXCEPT).

Integration with mysqldump and pg_dump utilities

We've integrated the IDE with the mysqldump and pg_dump utilities. To use the utility, choose the Dump with… option from the context menu.

Introspect schema/database

Now, when you access a schema or database not introspected by the IDE yet, the IDE will provide a quick-fix for that.

Managing datasource driver

Now the IDE helps you manage the version of the datasource driver and update it if it's not up-to-date.

If want to use a particular version of the driver, choose it in the driver's settings. Also, you can uncheck Use provided driver and use only files added to the Additional list.

your edition


For JVM and Android development


For web and enterprise development
Java, Kotlin, Groovy, Scala
Android ?
Maven, Gradle, SBT
Git, SVN, Mercurial, CVS
Perforce, ClearCase, TFS
JavaScript, TypeScript ?
Java EE, Spring, GWT, Vaadin, Play, Grails, Other Frameworks ?
Database Tools, SQL