如何将一种注解类型全局替换为另一种注解类型?

How to globally replace one annotation type with another?

我想在整个大型代码库中用另一种注释类型替换一种注释类型。

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

在 Eclipse IDE 中是否有一种机制可以做到这一点,而不是可能天真的文本 search/replace?

例如:

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 ) { ... }

在 Eclipse 中很容易。

  1. 搜索菜单中选择文件...
  2. 包含文本:设置为edu.umd.cs.findbugs.annotations.NonNull,然后单击搜索按钮。
  3. 在“搜索结果”视图中,根据需要使用上下文菜单删除选定的匹配项删除不应替换的匹配项
  4. 右键单击其中一个结果(上下文菜单)并选择全部替换...
  5. 替换文本匹配项对话框中,在With:框中输入替换短语javax.annotation.Nonnull,然后单击好的

以上将替换 imports,然后您将再次执行这些步骤以替换 @NotNull 用途。

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

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