Convert existing generics to diamond syntax

Michael Berry picture Michael Berry · Jul 22, 2011 · Viewed 7.5k times · Source

I rather like the diamond syntax for generics that Java 7 introduces - not so much from a time saving perspective (after all most IDEs fill that bit in for you anyway) but just because it makes the code look a bit cleaner. Because of this and other reasons (mainly the fact I'm developing a new piece of software and some of the new APIs in Java 7 will be useful) I'm most likely going to switch the existing codebase to use / require Java 7.

However there's a fair chunk already written pre-diamond syntax, and I'd like to consistently use the diamond syntax throughout. Is there an IDE shortcut (I'm using Netbeans but obviously can open the project in any free IDE to do the task) or something else that can automatically switch the existing generic code to use diamond syntax?

Answer

irreputable picture irreputable · Jul 23, 2011

Oh yes, I have successfully done this on IntelliJ (free Community Edition).

Menu > Analyze > Inspect Code...

In the result, select "Java language level migration aids > Explicity type can be replaced with <>"

Right click, run "Apply Fix 'Replace with <>'" And you got diamonds.

There was a bug about diamond on anomymous classes, so some code may not compile after the fix. You'll have to revert them back then.

// anonymous class, <> doesn't work.
new Factory<Pig>(){ ... }  
// however IntelliJ may wrongly "fix" it to
new Factory<>(){ ... }   // does not compile.