Refactoring Tools
Refactoring is a useful technique that's easily done
manually. However tools can help refactoring go much faster. The first
refactoring tool to be built was the Smalltalk Refactoring
Browser. Smalltalk's simple yet powerful language certainly allowed
such a sophisticated tool to be built relatively easily. Sadly
Smalltalk isn't a mainstream commercial language.Since then we've seen
refactoring tools appear for other languages, beginning in 2001 with
several tools for Java that passed the refactoring rubicon.
On this site I list the various refactoring tools I know about. I
don't attempt to review these tools in any depth. I just list them on
this site to give you a starting point for your own investigations. I
don't accept payment for listings, although I always appreciate a
free copy:-) Occasionally I do some consulting for refactoring tools
companies. The comments on tools are either mine or theirs (their's
are in italics).
If you want to find out opinions about refactoring tools and their
capabilities, I'd suggest a trip to the refactoring mailing list. If you have a tool you'd like to have mentioned then send details to me, but also do send to the mailing list - if for no other reason than it takes me a while to update this page.
Smalltalk
- Smalltalk Refactoring Browser
- The original refactoring tool, and still one of the
most full-featured. To all those who think that PhD projects are
doomed to irrelevance consider that these efforts led to a whole new
capability in programming tools.
Java
- IntelliJ Idea
- This is a fully fledged IDE whose abilities go far
beyond refactoring. I think they have succeeded in really moving
forward the state of the art for IDEs. Suffice to say that when I use
IntelliJ I almost don't miss Smalltalk any more :-)
- Eclipse
- An open source platform for IDE development - in many
ways Eclipse is the Emacs for the 21st century. It ships with a built
in Java IDE that includes a strong refactoring capability. The IBM
commercial WSAD tool is built on Eclipse.
- JFactor
- A plug-in tool - works with JBuilder and Visual
Age. Instantiations is a well respected outfit with a long history in
Smalltalk and Java VM and compiler technology.
- XRefactory
- An emacs plug-in that offers code completion and other
facilities as well as refactoring.
- JBuilder
- Borland's primary tool offers some refactoring support,
but isn't over the rubicon yet. Various plug in tools offer deeper
support.
- RefactorIt
- "A plug in for NetBeans, Sun Java Studio (fka Forte), Eclipse, JDeveloper and JBuilder and also usable as a stand-alone tool. Besides refactorings includes smart code searches, metrics and audits (i.e. smell detectors) with corrective actions."
- JRefactory
- A plug-in for JBuilder, NetBeans, and Elixir IDEs. Also
does UML diagrams.
- Transmogrify
- JafaRefactor
- A plug in for jEdit
- CodeGuide
- "CodeGuide offers advanced refactoring
capabilities. It can rename methods, fields, variables, labels,
classes or packages and automatically update all references throughout
the project. It can move classes and packages and update all
references. CodeGuide will check for potential problems prior to
refactoring to make the refactorings safe. There are a couple of
intelligent coding tools that will help you perform common tasks such
as Javadoc stub insertion, setter & getter creation and import
organization."
.NET
- ReSharper
- As well as refactoring it also brings many other
features from the popular Java IntelliJ IDE to the the C# world, so
much so that many of my buddies already can't manage without
it.
- C# Refactory
- Fully integrated with Visual Studio - adds a very
comforting "Refactoring" item to the edit menu.
- Refactor!
- A general .NET refactoring tool that supports both C#
Visual Basic and C++. There are free versions available for C++,
ASP.NET and Visual Basic.
- Visual Assist X
- Refactoring tool for Visual Studio handling all three
.NET languages.
- JustCode!
- Plug in for Visual Studio (2003 and 2005) offering
refactoring and other code analysis and assist features.
C/C++
- SlickEdit
- SlickEdit is a long time programmer editor that many
people like a lot. It's latest version adds pretty-reasonable
sounding refactoring support.
- Ref++
- Ref++ is a visual studio add-in that adds refactoring
support for C++.
- Xrefactory
- A plug-in for emacs. Supports renaming, parameter
manipulations and extract method.
Visual Basic
- Refactor! for Visual Basic
- "Refactor! for Visual Basic 2005 Beta 2 is
a free plug-in from Developer Express Inc., in partnership with
Microsoft, that enables Visual Basic developers to simplify and
re-structure source code inside of Visual Studio 2005, making it
easier to read and less costly to maintain. Refactor! supports more
than 15 individual refactoring features, including operations like
Reorder Parameters, Extract Method, Encapsulate Field and Create
Overload."
- Refactor! Pro
- This is the 'Pro' version of the free download
above. It has some extra features and also supports C#.
- Aivosto Project Analyzer
- "a Visual Basic code optimization utility.
While not strictly a refactoring tool, it does include a lot of
related functionality. For example, it can automatically do
Encapsulate Field, Remove Parameter, and Hide Method."
Python
- Bicycle Repair Man
- Given the context, this at least gets a prize for the
best name!
ruby
- Ruby Refactoring
- Work in progress of capability for RDT - the Eclipse
plug-in for Ruby.
Objective C
- XCode
- Apple's main developer tool includes a number of
refactorings.
Haskell
- HaRe
- An ongoing project to develop a refactoring tool for
Haskell at the Universit of Kent. It's part of a general
research effort to bring refactoring to functional programming languages.
Self
- Guru
- "Given a collection of Self objects,
Guru produces an equivalent set of objects in which there is no
duplication of methods or certain types of expressions. To achieve
this, Guru creates a replacement inheritance hierarchy and methods for
factoring out expressions."
Delphi
- Model Maker
- This apparantly does a few refactorings, not doing
extract method, but does seem to do some beyond simple renames,
at least as far as I can tell from the web site. There's also a
code explorer that puts this support directly into the IDE.
General
- X-develop
- "X-develop is our new multi-language
cross-platform IDE for professional coders. It offers code-centric
semantic-driven productivity features for C#, Java, JSP, J# and VB.NET
and supports .NET, Mono and the Java platform on Windows, Linux and
Mac OS X. X-develop includes many common refactorings: rename
variable/member/class, change method signature, extract method, inline
method, move classes, introduce variable, inline variable and
more."