When I think of Metrowerks, I think of rock-solid development tools with somewhat quirky interfaces that betray their origins on the Macintosh platform. The latest version of the company’s CodeWarrior for Java fits that image pretty well: It’s a reliable, easy-to-use development environment with just a few odd features and problems that keep it from being excellent.


Metrowerks CodeWarrior for Java 6.0

Pricing: $399
Supported platforms: Mac (including OSX) and Windows

Free trial download available from Metrowerks

Long on customizability
CodeWarrior’s strong suit is customizability. There are literally pages of preferences available to set the editor, debugger, and other features of the environment just to your liking. It supports multiple JVM versions and includes a RAD GUI editor for both Swing and AWT applications. The IDE can also be easily automated using a variety of scripting languages and includes hooks to attach third-party source-control and debugging tools.

Not that you’d really need a separate debugger for it, though; the integrated debugger is very robust. Its features include the usual standards: a stack crawler, watch window, and “run to cursor” support. These features include some decidedly nice touches, as well, like the ability to connect and debug a remote process and an option to skip stepping into Java’s runtime support code.

In contrast, the code editor is fairly plain vanilla. It includes syntax highlighting, bookmarks, function and class selectors, and a nice bracket-balancing feature. Nowhere to be found, however, is any kind of code completion feature like Microsoft’s IntelliSense.

Excellent mobile application support
CodeWarrior is perhaps best known for mobile application development, by virtue of the superb CodeWarrior Palm Edition IDE. It’s not surprising, then, that in its Java incarnation, CodeWarrior includes outstanding support for J2ME development. It’s possible to code, test, and debug your J2ME mobile applications all from within CodeWarrior’s development environment, which supports both the Connected Limited Device Configuration (CLDC) and Mobile Information Device Profile (MIDP) specifications.

Standard IDE is a mixed blessing
CodeWarrior for Java uses the standard IDE found in all the other CodeWarrior products, making it easy to pick up by those who have used any of its sibling products. As I’ve said, this is a nice, highly customizable IDE, but it has its fair share of quirks because of its Mac roots and the fact that it wasn’t designed specifically for use with Java. For example, many menu items aren’t where you’d expect them to be. (Looking for preferences? Look under the Edit menu.) And some of the IDE’s configuration dialogs lack an OK button. This isn’t a serious indictment of the product’s usability; you’ll quickly get used to its differences. It’s just somewhat jarring at first for someone used to the Windows UI standards.

When dealing with project build settings, you’re likely to be initially confused, as well. When I first started using the tool, I expected to be able to start working with a blank project template, write my code, and simply click compile. Not so. Because CodeWarrior treats Java applications as just another kind of compilation target, I had to instead wade through the project’s settings and set the project up to be Java-specific. I quickly learned to use the Java project stationery or application wizards instead, which preconfigure the build settings for the appropriate version of Java. Problem easily solved, but I have to wonder, since this is a Java IDE after all, why the Java-specific build settings aren’t the default for any new project.

“Pure Java” RAD tools
If Swing’s your thing, CodeWarrior’s GUI designer (Figure A) will seem like a breath of fresh air. Using a wizard interface, it’s easy to add a new frame to an existing application, and the designer used to add controls to a frame is very responsive. It has an integrated property inspector and a tree-view list of components on a frame, and it lets you add code to handle an event with a single click. All the standard layout managers are supported, with no oddball, vendor-specific packages needed for them.

Figure A
The GUI designer is cool, but it has a few problems.

But the designer’s not without its faults. Annoyingly, you must press [Enter] in a property inspector field before any changes will stick. Also, the designer has a particularly hard time dealing with deleted controls on a frame. It will remove the code it generated to create the object but will not clean other references to that object out of its generated code. You’ll have to do that by hand.

CodeWarrior for Java had a few problems in its initial release version. Most of these manifested themselves as frustrating crashes, particularly when using the GUI designer, that cost me quite a bit of lost code while working with the IDE. Installing the version 6.1 patch fixed most of these problems and greatly enhanced the stability of the product. Those interested in doing J2ME development for mobile platforms should download the 6.2 patch, which corrects a few J2ME-specific issues with the Windows version of the tool.

World-class technical support
I’d like to say a final word about Metrowerks’ technical support for its products. Although I didn’t have cause to contact them while preparing for this review, my past experience with Metrowerks free technical support has been uniformly excellent. E-mail inquiries have always resulted in prompt, helpful, personal replies, even if I happened to be writing about a problem with a trial version. Too often, tool vendors tend to treat their developer customers with a decided lack of respect. Metrowerks is a glowing exception to this rule.

CodeWarrior for Java is a solid Java IDE, with enough features and extensibility to please almost everyone. However, it has some frustrating minor problems that keep it just inches away from being truly excellent.

What’s your favorite?

If there’s one thing the Java world isn’t short of, it’s IDEs. Do you have a favorite you’d like to see featured on Builder? If so, post a suggestion to our discussion below.