IntelliJ Refactor для использования 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()
?
1 ответ
Решение
Предполагая, что вашим примером является код Java, вы можете сделать следующее:
- Метод извлечения на
bar.getFoo().getX()
(созданиеgetFooX()
) - Переместить созданный метод
getFooX()
вBar
если необходимо - Вызовите и замените дубликаты кода на
getFooX()
- Вызвать метод преобразования в экземпляр на
getFooX()
- Опционально структурная замена
$a$.getFoo().getX()
с$a$.getFooX()
если вы забыли шаг 3;-) - Включить все вызовы
getFoo()
(должно быть только вgetFooX()
)