JVM debugger
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 the class. If needed, the plugin is also capable of tracking stacktraces for chosen classes.
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
- Search speed has improved dramatically, 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.
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).
User interface
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 Settings → Editor → General → Appearance → Show 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 Settings → Editor → Colors & Fonts → Language Defaults → Semantic highlighting.
Flat file icons
In this update we've reworked the file icons to achieve a flatter design. While the new icons may look unusual, hopefully they feel sharper and less noisy to you.
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.
Resource bundle editor
The Resource Bundle editor now shows you which properties are unused in the project.
Find in path settings
Previously, the Find in Path dialog would reset some of its settings if you called it from the Editor. This behavior didn't seem convenient so we've changed it. Now the dialog always preserves previous settings independently of where you call it from.
Fira Code font
Another font-related change, now affecting all platforms, is Fira Code which is now bundled with the IDE and allows everyone to use Font Ligatures.
SF font for macOS
macOS users will notice that the default font of the UI (Settings → Appearance & Behavior → Appearance → UI Options) has changed to San Francisco (in particular SF NS Text), now the standard for the macOS platform.
Java
Refactoring to Java 8
Now, if you press Alt+Enter inside a non-trivial for-loop, the IDE will prompt you to replace it with a chain of 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 or ThreadLocal.withInitial. 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, it 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 a 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 (Settings → Build, Execution, Deployment → Compiler) has an option to generate runtime assertions for methods and parameters annotated with org.jetbrains.annotations.NotNull.
Starting now it supports non-JetBrains annotations as well, in particular JSR-305.
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 will 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.
Kotlin
Loop to Lambda Conversion
The Kotlin plugin can now detect many non-trivial cases where imperative for loops can be rewritten in a more compact and idiomatic manner using standard library functions such as filter, map, flatMap, count, etc. To trigger the conversion, put the caret on the for keyword and press Alt+Enter.
New Refactorings
The Kotlin plugin now supports Extract Interface and Extract Superclass refactorings, as well as an entirely new refactoring Introduce Type Parameter, providing an easy way to change a class or function into a generic one.
Postfix Completion
IntelliJ IDEA’s postfix code completion is now supported for Kotlin, with a large array of templates.
Scala
Scala.js
We’ve added better support for js.Dynamic. The Scala plugin now provides code completion and quick navigation to fields and methods defined in JavaScript libraries or project files.
learn more
Scala.meta
Another major plugin improvement is the support for scala.meta. IntelliJ IDEA supports new-style macro annotations and provides coding assistance for scala.meta quasiquotes.
learn more
Akka
The plugin now suggests actor constructor parameters in Akka’s Prop method (Ultimate only).
Migrators
Last but not least, we’re working on a new “Migrators API” that will allow library authors to tell IntelliJ-based IDEs how to migrate of projects that are using different library versions. This will make it possible to automatically migrate code, replace certain APIs, and so on. The plugin uses this API itself for providing migration of code to Scala 2.12, e.g. replacing it with SAM. Available migrators can be enabled via Settings → Language & Frameworks → Scala → Migrators.
Groovy
We’ve added actions that build Groovy files located in resource folders. They’re available via the main menu Build → Groovy Resources. Build Resources is incremental while Rebuild Resources builds from scratch.
Gradle
Delegate IDE build/run actions
We’ve added an option that delegates the native IntelliJ IDEA actions Build, Build Artifacts (both WAR and EAR) and Run to Gradle. Select Settings → Build, Execution, Deployment → Build Tools → Gradle → Runner → Delegate IDE build/run actions to gradle.
When this option is enabled, all these actions are performed via corresponding Gradle tasks.
learn moreComposite 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 moreMaven
The added support for Polyglot Maven allows you to write the POM file in any language, including Groovy, Scala, and even Ruby.
The Show Effective POM action works as usual and is especially useful if you want to see how Maven interprets the DSL.
Spring
Project Wizard
The layout of the Spring Initializr (Project Wizard) has been reworked to fit more items, and provide Search and additional information.
Meta annotations
We've added support for meta annotations based on @Autowired and @RequestMapping (including user-based and built-in annotations such as @GetMapping and @PostMapping).
Performance
Last but not least, we've improved the IDE's performance and responsiveness when handling large projects with numerous beans, regardless of whether they’re configured via XML descriptors or annotations.
Grails
The Grails view is back for Grails 3, as a tab inside of the Project tool window. All the Project tool window settings are now applicable to Grails, including Flatten Packages.
Items under the Plugins node (always the last in the list) navigate to the corresponding GrailsPlugin class.
JPA/Hibernate
In Spring Boot projects the Console now doesn’t require persistence.xml in the JPA facet. Also, the IDE now respects the naming strategies provided with Spring configuration files.
Support for queries has been updated according to the changes introduced with Hibernate 5.2.
Application servers
Liberty
Loose applications now can be run from the IDE. To run a loose application, open the Deployment tab of your WebSphere Run configuration and select the loose application XML file, instead of an artifact.
TomEE 7
Support for TomEE has been updated to its major version 7.
JavaScript
Flow
Now, when you set JavaScript version to Flow, the IDE reports problems in files annotated with "// @flow" on the fly.
Make sure you've specified the installation path for Flow in Settings → Languages & Frameworks → JavaScript → Flow.
ECMAScript 6
Convert to class
The IDE can now convert complicated prototype chains into a hierarchy of classes.
Default exports
The Find usages and Show usages actions have been extended to support default-exported functions and classes.
TypeScript
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
Now you can quickly generate components, directives, services, and other blueprints by pressing Alt+Ins and choosing Angular CLI from the Generate popup.
Protractor
Integration with Protractor, an end-to-end testing framework for Angular apps, now lets you easily run and debug tests in the IDE and see test results in a tool window, with options to filter them and quickly jump to the test source.
React Native
StyleSheet
When working with React Native apps, IntelliJ IDEA will now provide code completion (and color preview) for properties inside StyleSheet.
CSS
PostCSS
IntelliJ IDEA now offers a plugin for PostCSS. The plugin provides code completion, formatting, navigation, inspections, rename refactoring, and more.
Stylelint
Stylelint, a code quality tool for stylesheets, is now integrated so that you can see errors reported by it right in the editor.
Android
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 a new layout manager for creating 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
This release adds many stability and reliability improvements to Instant Run. If you have previously disabled Instant Run, the Android team encourages you to re-enable it.
Database
Editing triggers
Triggers now can be edited for MySQL, PostgreSQL, SQL Server, Oracle and Sybase.
Executing large scripts
If you run large script files from the context menu, you'll notice that now they are executed much faster.
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 mismatching 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, it 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.
Clouds
Google Cloud Tools
Google has introduced their own IDE plugin for deploying to Google App Engine. Eventually this plugin will replace the Google App Engine plugin provided by JetBrains.
OpenShift
On our side, we've updated the OpenShift integration with support for OpenShift V3. The updated plugin lets you create applications and manage their resources such as projects, services and pods.

