3/27/2009

Configure default target class name when copying class in Eclipse

I often copy a class and paste it into the same package, just as a template for creating another similar class. This is well supported in both NetBeans and Eclipse. The small difference between the 2 IDE is in the default name for the target class: NetBeans uses the format "Foo_1", while Eclipse uses "CopyOfFoo". Since I will never use a class like CopyOfFoo, I prefer the short form used in NetBeans.

So how to configure the default target class name in Eclipse? I searched in Eclipse preference to no avail. A grep through Eclipse installation directory reveals 2 jar files containing the string "CopyOf"

Binary file ./plugins/org.eclipse.jdt.ui_3.4.1.r341_v20080827-1100.jar matches
Binary file ./plugins/org.eclipse.wst.jsdt.ui_1.0.12.v200809172136.jar matches
The first one looks right. So I first quit Eclipse, back up plugins/org.eclipse.jdt.ui_3.4.1.r341_v20080827-1100.jar, expand it to /tmp/eclipse, and edit the file org/eclipse/jdt/internal/corext/refactoring/refactoring.properties.

Change the value of the following property from CopyOf{0} to the desired value (say X{0}):
- CopyRefactoring_cu_copyOf1=CopyOf{0}
+ CopyRefactoring_cu_copyOf1=X{0}
Update plugins/org.eclipse.jdt.ui_3.4.1.r341_v20080827-1100.jar with modified refactoring.properties:
cd /tmp/eclipse
jar uvf $HOME/eclipse/plugins/org.eclipse.jdt.ui_3.4.1.r341_v20080827-1100.jar org/eclipse/jdt/internal/corext/refactoring/refactoring.properties
Ideally, I wanted to append, rather than prepend, the extra 'X', but it turns out {0}X is resolved to a file name like Foo.javaX, not FooX.java. So Eclipse refactoring complains about it not being a valid compilation unit.

Restart Eclipse and see the new default name in action.  These steps have worked for me (my Eclipse is Version 3.4.1), but this should not be the preferred way to configure Eclipse.  I wish it can be configured in preferences.  Any changes to that plugin jar may be overwritten when it is updated from remote repository.