--- In a nutshell ---
Under certain (apparently rather rare; see details below) conditions, the references to a renamed entity (class, method, etc) in other source files will not be correctly replaced when using the Rename refactoring. Instead, the new name of the entity is inserted with a wrong offset in the referencing file, usually breaking the file.
--- Example ---
E.g., assume a file contains the following reference to "AClass":
self.mine = AClass()
Then applying the Rename refactoring of "AClass" to "BClass" in a different file will turn this reference into:
self.mine = ABClass)
(I.e., the "BClass" replacement appears to be applied one character too far to the right, leaving the capital "A" and removing the opening parenthesis.)
--- Conditions ---
As far as I can see, this problem will occur when the following two conditions hold for the file containing the reference to the renamed entity:
1. The file with the reference must contain special UTF-8 characters before the entity reference (in my case, a copyright symbol).
2. The file with the reference must not have been opened in the editor yet. I.e., as long as the file is only shown as a tab, the problem will occur; but once it has been brought to the foreground, the problem will no longer show for that file, even it is then closed/switched to the background.
--- To reproduce ---
I have attached a minimal Eclipse/PyDev project with two modules. Each module contains a copyright symbol in the module header, and each module defines one class. To reproduce,
1. Import the project. (Please make sure the source encoding is UTF-8.)
2. Open one of the two modules. (Please make sure to open only one.)
3. Rename "OtherClass" to, e.g., "OtherClassRenamed" by right-clicking any occurrence of "OtherClass" and selecting Refactor->Rename
4. Open the other module: Any occurrences of OtherClass should be replaced incorrectly as "OOtherClassRenamed".
Once both files have been opened in the editor, it is possible to undo the refactoring and then re-apply it again successfully (i.e., without the problem). Restarting Eclipse and applying the Rename in one module (without having brought the other module tab to the front) will make the problem appear again.
This reliably reproduces the issue for me with Eclipse 3.7.1, PyDev 2.2.4 on Windows 7x64. Evidently, it can become quite annoying for large projects when classes may be referenced from other files all over the place.
--- Workaround ---
Delete/Replace the special symbol in the source file. In my case, I had the copyright symbol (Unicode U+00A9) in every source file header; I have replaced it with a simple "(c)", and the problem no longer occurs.
Small project with two modules & classes to demonstrate "Rename" offset problem.