Eclipse:“Refactor - Rename”完全搞砸了,取代了文件中的任意字符

时间:2011-07-06 08:37:55

标签: java eclipse refactoring

在重构类名时,Eclipse最近显示了一种非常奇怪的行为。例如,让我们看看我们的一个类:

public class CampaignCSVPanel extends ContentPanel {

   private FileUploadField uploadFieldCsv = new FileUploadField();
   ...
}

我将其重命名为“CampaignCsvPanel”,然后发生以下情况:

public class CampaignCSVPanel extends ContentPanel{

   private FileUploadField uploadFielCampaignCsvPanelploadField();
   ...
}

奇怪 - 基本上每次我都会执行类重命名。还有更多:

  • 我已经创建了一个全新的工作区(并再次签出了相同的项目),
  • 我安装了一个新版本的Eclipse(即它在Eclipse 3.6和3.7中都有发生)。

我认为,必须与工作区中的项目有关,因为它只发生在我工作的一家公司的项目中 - 而不是我正在工作的其他项目项目上。你有什么想法,原因是什么?

(系统规格:

  • Ubuntu Linux 11.04,64位
  • Eclipse 3.6 / 3.7
  • 插件:Subversive,m2eclipse,Google(GWT)插件。
  • 我尝试了OpenJDK和SunJDK(1.6.0_24)。 )

3 个答案:

答案 0 :(得分:2)

试试这个:

转到Windows - >偏好 - > Java并取消选中“在没有对话的情况下在编辑器中重命名”

(我正在查看最近发布的Eclipse Indigo,我只假设以前版本的设置相同)

现在,您可以预览它打算进行的所有更改。

如果你可以这样做,并在该对话框中验证它正在进行一些疯狂的替换,那么你应该绝对提交Eclipse的错误并提供可重现的示例。我敢打赌,一旦你查看它打算替换的事物清单,你会找到解决问题的其他解释。

答案 1 :(得分:1)

这太烦人了。显然,重构引擎知道它必须替换一些东西但是替换错误位置的字符...... - 没有答案,只有一些额外的想法/测试

  1. 看起来你看看完整的项目。尝试仅将源导入到新项目,以检查问题是否仍然存在或是否已消失。
  2. 如果项目元数据已经签入(它不应该,但我们永远不知道),请在检查项目后立即清理项目。
  3. 检查该公司源文件的字符编码。也许存在某种不匹配导致编辑器替换错误的位置。并仔细检查源文件中是否存在奇怪的不可打印的ascii字节...再次,我们永远不会知道......

答案 2 :(得分:1)

我发现了问题:项目正在使用像$Date: $这样的svn标签当我删除它们时,问题就消失了。当我手动重新插入它们(以确保我不插入无效字符)时,问题会重新出现。

当我将SVN连接器从JavaHL切换到SVNKit时,我进行了一些实验,问题也消失了。