Java 如何用另一种注释类型全局替换一种注释类型?

Java 如何用另一种注释类型全局替换一种注释类型?,java,eclipse,refactoring,findbugs,Java,Eclipse,Refactoring,Findbugs,我想在整个大型代码库中用另一种注释类型替换一种注释类型 这需要更新import语句和注释本身 在EclipseIDE中是否有一种机制可以做到这一点,而不是简单的文本搜索/替换 例如: import edu.umd.cs.findbugs.annotations.NonNull; ... public @NonNull Integer foo( @NonNull Integer arg0 ) { ... } 需要更新到: import javax.annotation.Nonnu

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

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

在EclipseIDE中是否有一种机制可以做到这一点,而不是简单的文本搜索/替换

例如:

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中很容易

  • 从搜索菜单中选择文件
  • 将包含文本的设置为:to,例如,
    edu.umd.cs.findbugs.annotations.NonNull
    ,然后单击搜索按钮
  • 在“搜索结果”视图中,根据需要使用关联菜单“删除选定的匹配项”删除不应替换的匹配项
  • 右键单击其中一个结果(关联菜单)并选择“全部替换…”
  • 在替换文本匹配对话框中,在With:框中输入替换短语
    javax.annotation.Nonnull
    ,然后单击OK
  • 上面的代码将替换
    导入
    s,然后您将再次执行这些步骤来替换
    @NotNull
    使用的代码

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

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

  • 在Eclipse中,您可以重构方法签名,但不幸的是,这似乎没有覆盖它们的注释。顺便说一句+1:-)此过程必须执行两次。在“搜索>文件…”对话框本身上还有一个“替换…”按钮。但每种注释类型仍然有两个基于文本的搜索/替换。我很好奇是否有一个类似重构的操作可以用一种类型替换另一种类型,并且保证不会影响其他类型。(也就是说,我认为示例和我们的代码库中出现误报的可能性非常低。)@Andythonas值得一提的是,我以前在Eclipse中使用更新的答案中概述的方法进行过此类重构。@gknicker-我已经想到了这一点,但不幸的是,有很多项目,每个项目都有自己的类路径。我怀疑Eclipse中没有专门用于此任务的机制。您已经介绍了两种合理的解决方法。我使用了第二种方法。我首先删除了fbjar,通过修复产生的问题来创建一个虚拟注释,移动并重命名它以匹配所描述的目标,最后删除了存根。工作得很好!