Einfache benutzerdefinierte Umgestaltung in IntelliJ

Diese Frage ist ein Follow-updafü.

Sag ich habe eine Klasse Foo.

class Foo {
    protected String x = "x";

    public String getX() {
        return x;
    }
}

Ich habe ein Programm, das Foo verwendet und LoD verletzt Law of Demeter).

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(); 
}

Ich kann diesen Code so umgestalten, dass LoD in zwei Schritten verwendet wird.

⌥⌘m bar.getFoo().getX() ->getFooX(bar) (in Methode extrahieren, auch Vorkommen suchen und ersetzen) F6 getFooX(bar) ->bar.getFooX() (zur Instanzmethode wechseln, auch Vorkommen suchen und ersetzen)

Das Programm, das @ verwendBar verletzt LoD nicht mehr.

class Bar {
    protected Foo foo;

    public Bar() {
        this.foo = new Foo();
    }

    public Foo getFoo() {
        return foo;
    }

    public String getFooX() {
        return foo.getX();
    }
}

public static void main(String [] args) {
    Bar bar = new Bar();
    String x = bar.getFooX();
}

Ich frage mich, ob es in IntelliJ eine Möglichkeit gibt, eine benutzerdefinierte Refactoring-Methode zu erstellen, mit der diese beiden Schritte zu einer konsolidiert werden.

BEARBEITE Ich habe eine Antwort von JetBrains mit einem Link zu einer bereits vorhandenen Funktionsanforderung erhalten. Bitte stimmen Sie darüber ab, wenn Sie dies nützlich finden!

Hallo Michael

Scheint, wir haben eine ähnliche Anfrage in YouTrack:https: //youtrack.jetbrains.com/issue/IDEA-12240. Fühlen Sie sich frei, dafür zu stimmen und Kommentare zu hinterlasse

it freundlichen Grüßen, Yaroslav Bedrov JetBrai

BEARBEITE Es gibt zumindest eine Möglichkeit, Probleme mit Law of Demeter zu untersuchen.screenshot http://i59.tinypic.com/2s80ft0.pn

Hier ist ein Kernstück enthält ein Inspektionsprofil, das nur nach LOD-Verstößen sucht. Du kannstImportieren Sie es in IntelliJ.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage