IntelliJ 重构以使用 LoD

IntelliJ Refactor to use LoD

假设我有一些 class 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() 上的提取方法(创建 getFooX()
  2. 如有必要,将创建的方法getFooX()移动到Bar
  3. getFooX()
  4. 上调用 查找和替换重复代码
  5. getFooX()
  6. 上调用转换为实例方法
  7. 可选结构将 $a$.getFoo().getX() 替换为 $a$.getFooX() 如果您忘记了步骤 3;-)
  8. 内联 getFoo() 的所有调用(应该只在 getFooX() 中)