What happened was, I got coder’s block; facing an icky part of my Sigrid/Zeppelin side-project, I procrastinated for weeks because all of a sudden everything else became more interesting. Well, I’m supposed to talk about it at Java One and I’ve refactored large parts of it to the point where it doesn’t work any more. So I’ve increasingly been spending my time slaving over a hot NetBeans 5.0. There is absolutely no better way to find out the truth about software than actually using it to get real work done. Note: I’m doing all-POJO low-level infrastructure, so I don’t know the first thing about JSF’s and Layouts and Web Services and all that stuff. Having said that, for what I’m doing, NB5.0 is fucking good software. Among other things, it’s really really fast on my PowerBook, and speed is a feature (although to get the most out of it you need a bigger screen). Yes, the Ultra 20 is faster on compiles, but I’m having trouble getting it on VPN so it can talk to CVS, and for interactive on-screen work, the difference isn’t significant. Anyhow, I’m keeping a running RFE list; for those not in the software biz, that stands for Request For Enhancement; they arise when a customer says “Your stupid software is broken, it should do X” and some hard-ass manager with his eye on the ship date says “That’s not a bug, it’s an RFE.” If I were a Good NetBeans Citizen I would go find the right web forms and submit bugs and RFEs and so on, and maybe I will. But right now I’m in a hurry and (muahahaha) I’m a blogger! So I’ll just use this post as a place to track ’em. The rest of this is only of interest to IDE interface geeks and NetBeans phanatics.
No Green JUnit Bar · I’m quite sure that 40 years from now I’ll be sitting in an old-folks’ home in a warm climate somewhere, sipping a gin-and-tonic and whining about how NetBeans still doesn’t do the green bar.
Keymapping · Near as I can tell, you can map pretty well anything NetBeans does to pretty well any key. Suppose, just for example, that I wanted to map “Move Down” to control-N (yes, I know about the Emacs keymappings, but I don’t want that, I just want a bit of Emacs salt-and-pepper on the defaults). You get a screen that looks like this:
Where, do you suppose, you might find “Move Down” in here? Good luck, you’ll need it. I always end up going through all the sub-menus one by one by one, swearing louder and louder; it turns out that in this case, what I’m looking for is under “Other” and rejoices in the name “Insertion Point Down”. Feh. I’m not sure what the solution is.
Find Usages · You’ve got your cursor in some method declaration and you hit the key for “Find Usages”. Does it go and find the usages? No, it does not; it puts up a dialogue like this:
Surely “Search in Comments” is a preference? And why a tick-box for Find Usages when I’ve just said that’s what I want to do? This dialogue should be junked, just go and find the damn usages already.
Auto-Completion · I haven’t used Eclipse or Idea or Visual Studio recently, so I’m not really aware of the competitive standards, but NetBeans’ auto-complete feels really excellent to me, maybe because the 5.0 version is better than the 4.* version which was better than the 3.6 version where I started. It usually gives me more or less exactly what I need. Having said that, there’s one enhancement I’d like and one egregious botch that needs fixing.
The enhancement is this: sometimes the suggestion list is too long, and I’d like it to be shorter. Most of the time, I find that I’m calling methods from the package I’m in, or the project I’m in, or one of the projects I have open. Let’s call those methods “Local methods”. How about, when I type auto-complete, all it suggests are local methods; and if I want the whole list including java.foo.bar.baz.*, I hit the auto-complete key again; of course, if there’s nothing local to suggest when I hit auto-complete the first time, it could go to the big list.
Here’s the botch: suppose I type
MessageBuilder mb = new
and hit the auto-complete key. NetBeans says “No suggestions”. Do ya think I
might just possibly want a new MessageBuilder()
, just maybe?
If I take it a few more keys:
MessageBuilder mb = new Message
the auto-complete shows me everything in the bloody Java universe that begins
with Message
, of which there’s quite a bit. There’s even quite a
bit that begins with MessageB
.
The right thing to do is obvious, I’d think.
Brackets and Semicolons ·
Suppose I type:
foo = frob(new Bar(3 + baz(27
NetBeans will helpfully fill in the end-brackets so what I see on the screen
is:
foo = frob(new Bar(3 + baz(27)))
with my cursor after the 27. Then if I type ‘;’ NetBeans hops over the
closing braces before inserting it and I’m left with a nicely-completed
statement.
Now, if I type
foo = frob(new Bar(3 + baz(xyzzy[27
the same thing happens, NetBeans shows me
foo = frob(new Bar(3 + baz(xyzzy[27])))
But, if I now type ‘;’ it gets left inside the square brackets,
which are treated differently from round brackets. Boo. Hiss.
Quotes in Comments · When you type a single or double quote, NetBeans helpfully puts in two, just like it does with brackets. Even when you’re in a comment. So if you’re writing the Javadocs and want to be helpful and say “Don’t call this unless...”, well you can figure it out. This one may just be a buglet, because I think it didn’t used to do this.
Chatty · When I hit F9 for “compile this file” I see:
init:
deps-jar:
init:
deps-jar:
compile:
To run this application from the command line without Ant, try:
java -jar "/Users/twbray/dev/NetBeans_projects/Sigrid/dist/Sigrid.jar"
jar:
init:
deps-jar:
compile:
jar:
Compiling 1 source file to /Users/twbray/dev/NetBeans_projects/Zeppelin/build/classes
compile-single:
BUILD SUCCESSFUL (total time: 1 second)
Is all that really necessary?