简体   繁体   中英

IntelliJ Refactor to use LoD

Say I have some class Foo

class Foo {
    protected String x = "x";

    public String getX() {
        return x;
    }
}

I have a program that uses Foo and violates 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(); 
}

Refactoring to use LoD looks like this:

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 has a lot of refactoring methods (eg extract to method, extract to variable, inline).

Is there a method in IntelliJ-IDEA that will refactor code like bar.getFoo().getX() to look like bar.getFooX() ?

Assuming that your example is Java code, you could do the following:

  1. Extract method on bar.getFoo().getX() (creating getFooX() )
  2. Move the created method getFooX() to Bar if necessary
  3. Invoke Find and Replace Code Duplicates on getFooX()
  4. Invoke Convert To Instance Method on getFooX()
  5. Optionally Structural Replace $a$.getFoo().getX() with $a$.getFooX() if you forgot step 3;-)
  6. Inline all invocations of getFoo() (should be only in getFooX() )

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM