What to expect from IntelliJ IDEA 2017.3 — Here are some of the major changes
© Shutterstock / rangizzz
IntelliJ IDEA 2017.3 EAP was announced last week so now it’s time to reveal some of the major changes the upcoming IDE update will deliver. Don’t forget — IntelliJ IDEA 2017.3 will be released this fall.
IntelliJ IDEA 2017.3 will be released this fall (so stay tuned) but in the meantime, let’s have a look at the IntelliJ IDEA 2017.3 EAP. If you want to give the new features a try, download the EAP build from the EAP page on the JetBrains website.
However, keep in mind that since this is an early build, things might not work as expected. If you encounter a problem, use the issue tracker to let the team know.
Major changes in IntelliJ IDEA 2017.3
Andrey Cheptsov of JetBrains revealed that they continue enhancing their data flow analysis for Java code.
That being said, you should know that IntelliJ IDEA 2017.3 now detects possible nullability issues even in Stream API call chains:
Furthermore, the quick-fixes that help migrate plain for loops to Stream API now cover a few more sophisticated but quite common cases.
Usages of StringBuilder can be replaced with Stream.collect and Collectors.joining while code which iterates to find a maximum or a minimum can now be automatically replaced with Stream.max and Stream.min. The data flow analysis for the Optional type has also become smarter and now reports even non-obvious issues, Cheptsov added.
Another improvement has to do with the way nullability annotations are inferred. Until now, annotations were inferred only for library methods’ parameters and for any methods’ return types but now it also infers nullability annotations for parameters of sealed and private methods.
If you want to see the multitude of new inspections, go to Settings, type “2017.3” in the Search field et voilà.
JetBrains has been constantly improving the Debugger in recent releases so why stop now? IntelliJ IDEA 2017.3 is, therefore, no exception.
The Debugger tool window adds a new Overhead tab. This tab shows you the overhead added either when stepping over the code or when Data Renderers evaluates values to display them in Variables, Watches, or other places. The best part is that if you don’t need it, it can be easily hidden and restored later.
You can reduce possible overhead (yes, the Debugger lets you reduce it) by using the On-demand Data Renderers. As of now, evaluation of values in Variables, Watches, or other places can be done on click when needed, rather than automatically.
This new feature can be enabled in the Data Renderers settings for each renderer. In Variables, Watches, and other places, all you need to do is click the renderer’s expression placeholder to see the value. Furthermore, renderers can be “muted” from the context menu, thus enabling the On-demand setting for the selected renderer. Same functionality is automatically enabled for any object if you disable the default toString renderer.
Support for Spring and Spring Boot is also getting better with each update, Cheptsov wrote. The team introduced initial support for auto-configured MVC web applications, already available in the EAP.
Another thing related to Spring, and project configuration in particular, which promises to make your life better is auto-detection of Spring facet and context. Facet configuration is always a painful process required to have Spring-dedicated coding assistance so this might come in handy.
Support for Vue.js is also getting better — this update adds automatic closing of curly braces, and coding assistance for props (including props as arrays) and dataproperties/methods.
The Change Signature refactoring now also works better for ES6 methods: the IDE correctly updates all usages of the method across the project. The Extract Parameter refactoring uses the ES6 parameter syntax. As far as ES6 is concerned, when possible, import statements are now added automatically when code is pasted from the clipboard.
Last but not least, code styles are now imported automatically from ESLint and TSLint when you open a project.