JetBrains' IntelliJ comes in two basic flavours: a paid version, which is the one I reviewed here, and a free open source Community Edition that provides basic Java editing features. Because the paid version of IntelliJ competes with multiple free products, it has to prove its stripes all the time. It does so by innovating faster than the other IDEs. Its long record of innovation has won it numerous fans who are passionate about the product. Indeed, there is much to be passionate about.
But it's the features that IntelliJ provides, more than the range of supported technologies, that have won the hearts and minds of many developers. Years ago, for example, it was the first IDE to provide a dialog box comparing the actual output of a unit test side-by-side with the expected output, with highlights marking the differences.
Today, it comes with features that are generally better implemented than those of its competitors, as well as some that are entirely unique. In the former category, IntelliJ offers a wider range of possible refactorings to a code base than most other tools. In addition, it has a built-in syntax checker that not only looks for errors but also for "smells," an agile term that refers to code that works correctly but is poorly written: functions that are overly complex, for example, or code that tests for a condition that is always true. Furthermore, IntelliJ provides its own code coverage tool that shows inside the IDE which lines of code have been exercised by a given run of tests. Should you prefer a different option, IntelliJ also bundles the open source EMMA product and has plug-ins for all other coverage tools of note.
IntelliJ IDEA with two side-by-side editors.
In the category of unique features are checkers that highlight duplicate code, a particularly pernicious smell, and one that can be hard to spot in a large code base. IntelliJ also has a dependency analysis tool that shows on a grid which methods depend on others and which ones are depended on.
This description, however, does not do justice to the feel of using IntelliJ, which is one of dealing with software that frequently surprises you by anticipating your needs. For example, all the IDEs reviewed here have a popup help feature that is triggered when you are typing in the name of a method. In IntelliJ, this feature (termed auto-completion) uses the contextual information from the code to guess which entry to place at the top of the list so that you don't have to scroll through multiple options. It guesses correctly with uncanny frequency. At times, it seems almost supernatural.
IntelliJ does have some limitations. Most notable is a longstanding lack of good documentation. Figuring out how to use advanced features or to solve specific problems is undeniably frustrating. Fortunately, email inquiries are answered by the developers themselves. As a result, you need only ask a question once to get the right answer. The only hitch in the process is that the developers are located in Russia, which introduces a time lag. A second issue is long startup times. This problem was reduced somewhat with version 9.0, but startup is still annoyingly slow.
These complaints aside, IntelliJ is an excellent IDE that shows how superior craftsmanship can produce commercial products that compete successfully with free competitors.