SourceForge Logo

ImportScrubber - clean up those import statements!

Before After
package com.foo.bar;

import java.io.*;
import javax.swing.*;
import com.us.Something;
import javax.swing.JLabel;
import java.io.IOException;
import java.net.*;
import com.us.SomethingElse;
import java.lang.Integer;
import java.awt.*;
import java.awt.Frame;
package com.foo.bar;

import java.io.File;
import java.net.SocketOptions;
import java.net.URL;
import java.net.URLConnection;

import javax.swing.JLabel;
import javax.swing.JOptionPane;

import com.us.Something;
import com.us.SomethingElse;

No more unnecessary imports, no more import on demand - just good old single type imports. And they're sorted, too!

You can download ImportScrubber, check out a screenshot, see how to use ImportScrubber's Ant task, or read about Importscrubber's current limitations. If you've installed Java Web Start, you can run ImportScrubber as a JNLP application. You can also mosey over to the Jakarta web site where parts of ImportScrubber are being using in Maven.

Thanks to Sourceforge for hosting this project. Thanks to Poolmart for letting me use a picture of one of their scrub brushes. Thanks to Markus Dahm, writer of BCEL, which I use for parsing class files.

Contributors

Jonathan Ellis
Rewrote most of Importscrubber for 1.4.3.
Toshiyuki Iwata
Contributed a file encoding option patch.
Neil Wightman
Contributed all of the new code in 1.4.2 - lots of GUI cleanups and threading improvements.
Roedy Green
Pointed out "val." imports bug.
Stefan Kost
Notified me about v1.4.0 bug (the same bug that Marcus Crafter found).
Marcus Crafter
Provided a shell script, suggested a "space vs tab" bugfix (v1.4.0)
Found a heinous bug in 1.4.0.
Martin Saxer
Rewrote the import statement sorting logic to keep packages together (v1.3.9)
Olivier
Provided a French translation (v1.3.9)
Mark Langley
Suggested that fully qualified imports not be included in the import statement list (v1.3.9)
Jason Van Zyl
Tweaked copyright header preservation feature (v1.3.5, v1.3.6)
Reported static class bug (v1.3.8)
Marcus Dahm
Suggested some changes to the way ConstantUtf8 class file entries were being analyzed (v1.3.7).
Scott Willy
Contributed the DualRootSingleFileChooser (v1.3.3)
Suggested the copyright header preservation feature (v1.3.4)
Trent Hoeppner
Found several bugs in v1.3 scripts
Suggested the copyright header preservation feature (v1.3.4)
Uwe Hoffman
Suggested using the BCEL Visitor when parsing class files. Identified constant bug.
Dan Bromberg
Suggested file browser open to a more useful directory (v1.2.2)
Channing Walton :
Suggested package break feature that was implemented in v1.2 and tweaked in v1.2.2.
Fine-tuned package break feature in v1.1.6
Package break feature in v1.1.4
Paul Holser
Identified java.lang bug that was fixed in v1.1.9.
Identified "import class." bug that was fixed in v1.1.8
Fixed java.lang subpackage filtering bug for v1.1.7.
Brad Johnson
Reported static inner class bug which was fixed in v1.1.6 (later reported by Paul Holser and Channing Walton)

Related projects

CleanImports by Tom Brus - a good one. Lots of options. Uses BCEL.
ImportCleaner by Cay Horstman - very fast, parses class files using a handwritten parser. Suffers the same constant inlining woes as ImportScrubber.
Importscrubber by Joshua Allen - uses a neat strategy of Class.forName'ing any candidate imports.
Importifier by Scott Stanchfield - runs inside IBM's VisualAge IDE.
TIM by Chive Software - commercial product.

Any comments or questions, please let us know. Thanks!