One of the problems with the wide variety of choices that are available when it comes to Java IDEs is that most of them simply aren’t very good. I personally am sick of the glorified text editors that, by virtue of providing a graphical interface for the Java command-line compiler, deign to call themselves “integrated development environments.” On the other hand, I’m also quite tired of the bloated, slow, “feature packed” environments that tend to get in your way more often than they actually help you get work done and that don’t seem to get any better with each new release.

I’m going off on this brief rant to give you some idea of how low my expectations were for IntelliJ’s IDEA Java IDE, which was recommended to me by a member of’s own Java development staff. I’m hoping that by keeping my preconceptions in mind, you’ll appreciate my enthusiasm when it comes to IDEA.

The first time I used IDEA, I was able to set up a new project and start coding in under two minutes, without getting lost or having to refer to the manual. Over the course of the last few months, I’ve logged around 100 hours using this IDE, and I have yet to experience a single crash, had to fight with a single ill-conceived feature, or even had cause to crack open the documentation files. That’s more than I can say for any of the other, more established, Java development environments I’ve seen recently.

A host of productivity features
IDEA’s premise is simple enough: Make programmers as productive as possible. It includes a slew of productivity aids that, shockingly enough, actually make it easier to work with Java. The various tool windows located around the main editor window can be set to automatically expand when you mouse over them and to collapse again when they’re not needed, so you can get maximum screen real estate.

The editor is smart enough to help you out but still simple enough to stay out of your way, full of “nice touch” features like automatically importing a package for you when a class is first referenced in your project. IDEA’s version of code completion, known as “SmartType,” is on par with what you’ll find in a Microsoft development product: As you type characters, the list of available options narrows, and the method-level help window includes parameter information. Borrowing another tactic from “the enemy,” IDEA also uses the “put a red line under it” method of syntax error highlighting, and its background syntax parser can inform you of quite a few compilation errors as soon as you type in the code.

Heavy-duty refactoring support is built in as well. IDEA has options for the basic stuff: It can scan and replace class, method, and variable names within a given scope and automatically update references when relocating classes to different packages. It can even update comments and string literals when doing so. You can copy and paste entire classes into different files, perfectly formatted, and extract an interface signature, method signature, or a superclass from any class in your source code.

The technical stuff
IDEA’s integrated debugger supports both local and remote debugging, although you may need to tinker with some settings for the latter to get it working properly. In addition to providing the usual watch, stepping, and manual breakpoint functionality, you can set automatic field access and exception breakpoints and even browse variable values while in break mode via a convenient tree.

The IDE supports multiple JVM configurations, several compilers, and the Ant build system, and it makes configuring multiple custom classpaths easy. All these settings are controlled via a project information dialog box, so each of your projects can use different settings with a minimum of fuss. I wasn’t able to find a way to copy any of these settings from one project to another, which is a minor annoyance, but one I can live with. IDEA also provides built-in support for several change-management systems like Visual SourceSafe, the open source CVS, and Perforce.

Final impressions
IDEA has a very clean, uncluttered layout. The auto-hiding tool windows, which I generally don’t like, are very effective here, probably because they are activated by mousing over discrete areas of the screen, all of which are clearly marked. There’s none of the wrestling with docking locations that plagues many other IDEs here. IDEA’s menus are logically laid out, and you can easily locate most any command you’ll need via the top-level menus, keyboard shortcuts, or the context-sensitive right-click menus, which IDEA makes effective use of. I should also mention that the main editor window supports scrolling by mouse-wheel. (Yes!)

IDEA concentrates on coding features, with a minimum of the “enterprise” clutter found in other IDEs. IDEA is about writing and maintaining code and supports those activities well. The only things I found myself wishing for while using it were a RAD-style GUI builder and a quick way to jump to a particular method or class in a source file—this is possible using the Structure tool window, which groups the methods and classes in your project into a hierarchical tree, but I’d prefer to have access to a quicker method. I guess my Visual Basic roots must be showing. I was particularly impressed with the interface implementation, method override, and refactoring tools. Very simply, IDEA is a coder’s dream, obviously developed by a team with intimate knowledge of Java. It’s got a very reasonable price tag, to boot.

Subscribe to the Developer Insider Newsletter

From the hottest programming languages to commentary on the Linux OS, get the developer and open source news and tips you need to know. Delivered Tuesdays and Thursdays

Subscribe to the Developer Insider Newsletter

From the hottest programming languages to commentary on the Linux OS, get the developer and open source news and tips you need to know. Delivered Tuesdays and Thursdays