IntelliJ重构使用LoD

说我有一些课Foo

class Foo { protected String x = "x"; public String getX() { return x; } } 

我有一个程序使用Foo并违反了LoD

 class Bar { protected Foo foo; public Bar() { this.foo = new Foo(); } public Foo getFoo() { return foo; } } public static void main(String [] args) { Bar bar = new Bar(); String x = bar.getFoo().getX(); } 

重构使用LoD看起来像这样:

 class Bar { protected Foo foo; public Bar() { this.foo = new Foo() } public String getFooX { return foo.getX(); } } public static void main(String [] args) { Bar bar = new Bar(); String x = bar.getFooX(); } 

IntelliJ-IDEA有很多重构方法(例如,提取到方法,提取到变量,内联)。

IntelliJ-IDEA中是否有一个方法可以像bar.getFoo().getX()那样将代码重构为bar.getFooX()

假设您的示例是Java代码,您可以执行以下操作:

  1. bar.getFoo().getX()上的Extract方法(创建getFooX()
  2. 如有必要,将创建的方法getFooX()移动到Bar
  3. getFooX()上调用查找和替换代码重复 getFooX()
  4. getFooX()上调用转换为实例方法
  5. (可选$a$.getFooX()如果您忘记了第3步,则使用$a$.getFooX()替换$a$.getFoo().getX() 😉
  6. 内联getFoo()所有调用(应仅在getFooX()