如何全局替换一个注释类型?

时间:2015-03-06 20:25:48

标签: java eclipse refactoring findbugs

我希望在整个大型代码库中将一个注释类型替换为另一个注释类型。

这需要更新import语句和注释本身。

除了可能天真的文本搜索/替换之外,是否有一种机制可以在Eclipse IDE中执行此操作?

例如:

import edu.umd.cs.findbugs.annotations.NonNull;
...
    public @NonNull Integer
    foo( @NonNull Integer arg0 ) { ... }

需要更新为:

import javax.annotation.Nonnull;
...
    public @Nonnull Integer
    foo( @Nonnull Integer arg0 ) { ... }

1 个答案:

答案 0 :(得分:2)

在Eclipse中很容易。

  1. 搜索菜单中选择文件...
  2. 包含文字:设置为edu.umd.cs.findbugs.annotations.NonNull,然后点击搜索按钮。
  3. 在搜索结果视图中,根据需要使用上下文菜单删除所选匹配以删除不应替换的匹配项
  4. 右键单击其中一个结果(上下文菜单),然后选择全部替换...
  5. 替换文字匹配对话框中,在使用:框中输入替换短语javax.annotation.Nonnull,然后点击确定
  6. 以上内容将取代import,然后您再次执行这些步骤以替换@NotNull次使用。

    如果您更喜欢使用重构工具,有一种方法可以解决这个问题。但它非常复杂,特别是如果您无法访问您希望远离的标识符的源代码。

    1. 如果引用的标识符不在您的控制之下,则通过任何必要的操作将其置于您的控制之下。例如,我们假设您正在使用jar文件中的第三方注释edu.umd.cs.findbugs.annotations.NonNull。理想情况下,您可以访问源代码,但您也可以删除注释。在任何情况下,您都要从项目中删除第三方jar文件,并将其替换为项目中的源代码,然后进行干净的构建。
    2. 有问题的来源现在在您的控制下,Refactor->Rename...到目标名称,然后Refactor->Move...到目标包。您可能必须先在项目中创建包。
    3. 最后,如果适用,请删除您刚刚创建的冒名顶替者,以便真正的冒名顶替者能够占据正确的位置。
    4. 根据需要进行任何其他临时包清理。