Простой пользовательский рефакторинг в IntelliJ
Этот вопрос является продолжениемза это.
Скажем, у меня есть класс 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 в два этапа.
⌥⌘mbar.getFoo().getX()
->getFooX(bar)
(извлечь в метод, также найти и заменить вхождения)F6 getFooX(bar)
->bar.getFooX()
(перейти к методу экземпляра, также найти и заменить вхождения)Программа, которая используетBar
больше не нарушает LoD.
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();
}
Мне интересно, есть ли способ сделать собственный метод рефакторинга в IntelliJ, который бы объединял эти два шага в один.
РЕДАКТИРОВАТЬ Я получил ответ от JetBrains со ссылкой на уже существующий запрос функции. Пожалуйста, проголосуйте, если вы найдете это полезным!
Привет Майкл,
Кажется, у нас есть аналогичный запрос в YouTrack:https://youtrack.jetbrains.com/issue/IDEA-122400, Не стесняйтесь голосовать за него и оставлять комментарии.
С наилучшими пожеланиями, Ярослав Бедров JetBrains
РЕДАКТИРОВАТЬ Существует, по крайней мере, способ проверки на наличие проблем закона Деметры.скриншот http://i59.tinypic.com/2s80ft0.png
Вот суть который содержит профиль проверки, который будет просто искать нарушения LoD. Вы можетеимпортировать его в IntelliJ.