结构查找和替换IntelliJ

时间:2017-02-08 22:53:47

标签: java intellij-idea

我需要搜索方法的出现次数,更改名称,保留方法体,为方法添加注释,并确保导入注释。我需要在项目范围内的多个类中执行此操作。

这些文档对我来说没有意义,任何人都可以了解这个功能以及如何使用IntelliJ的结构查找和替换功能完成以下任务?

import a;
import b;
import c;

public class SomeClass extends SomeAbstractClass implements SomeInterface {

    @Override
    public void someMethod() {
        methodbody.getMoreBody();
    }
}

转换为

import a;
import b;
import c;
import some.package.with.annotation;

public class SomeClass extends SomeAbstractClass implements SomeInterface {

    @Override
    @annotation
    public void newMethodName() {
        methodbody.getMoreBody();
    }
}

2 个答案:

答案 0 :(得分:0)

目前的问题是我们希望将行为应用于具有特定名称的所有方法,这些名称存在于某个类中。重命名方法的字符串替换操作很简单。使用intelliJ进行结构替换可能是可能的(我真的不知道),但完全可以使用切入点来避免。

@Pointcut(
  "execution(public * someMethod(..))")
private void someMethod() {}

@Pointcut("target(com.company.SomeAbstractClass+)")
private void someAbstractClass() {}

@Before("someMethod && someAbstractClass()")
public void somePointCutAction(Pointcut pointcut) {
  // Some logic to execute before the method that is a
  // child of SomeAbstractClass and has a method name someMethod
}

答案 1 :(得分:0)

由于您只需要一对一替换(无需搜索模式),因此您不需要进行结构搜索。

您可以执行以下操作。

  • Ctrl + Shift + R (或编辑 - >查找 - >路径替换
  • 将以下文字添加到相关职位

要查找的文字:@Override[\S\s]*public void someMethod

替换为:@Override\n @annotation\n public void someMethod

点击查找&然后适用于所有事件。

enter image description here

  • 这将会发现&为你替换部分。

  • 但是,这不会将您的注释导入.java文件。如果您的导入是明确的导入,则可以通过设置 - > 类型 auto import 即时导入 - > Java - >将勾号设为 add unambiguous imports on fly.否则您必须为每个文件手动导入它们。希望这会有所帮助:))

enter image description here