Eclipse: Most useful refactorings [closed]
It is an interesting question. I know what works for me and it is interesting to see what others use.
I decided to take a more scientific approach to determine the most commonly used refactoring commands. Eclipse has a Usage Data Collector (UDC) feature built in. The data is publicly available. I took the data and extracted the following graph which shows the most commonly used editing commands (without navigation commands).
alt text http://img.skitch.com/20091207-bmcng36rjy837sqmcx58b85age.gif
However, I am a strong believer in "Save Actions" for formatting and organizing imports (read my article about it), so I wouldn't count those. I would also remove the commenting actions. The picture looks like this: alt text http://img.skitch.com/20091207-ieas1mk5114fwitucqkqxyw6t.gif
Rename - because giving things meaningful names is the best way to write self-documenting code. Shift+Alt+R
Extract method - whenever a method gets too long. Shift+Alt+M
Extract constant - because magic numbers are bad. Shift+Alt+T (refactoring menu, there's no direct shortcut).
Inline/introduce variable - to remove clutter from methods. Shift+Alt+I (inline), Shift+Alt+L (introduce)
My favourites (in order of using):
- Rename (
Alt-Shift-R
, orCtrl-1
for faster in-file renaming)
Good renaming variables,methods,etc. without side effects. - Extract Variable (
Ctrl-1
,Alt-Shift-L
)
Good for splitting a quick-made-100-character-line to separate steps. - Extract Method (
Alt-Shift-M
)
Create a method out of some code without any side effects. - Split Variable Declaration (
Ctrl-1
)
Good when you initialize a variable at the declaration and now find out, that the initialisation needs to be in a try- or if-block. - Change Method Signature (
Alt-Shift-C
)
The handy Swiss Army Knife of method signature manipulation, including default values for new parameters. - Pull Up/Push DownPull methods and variables to a generic interface or superclass or push it down to a subclass
- Extract Interface/Superclass
Extract an interface or a superclass out of the current class. Very handy.