Как рефакторинг вызова нового в вызов метода с параметрами? - PullRequest
2 голосов
/ 06 июня 2019

У меня есть этот код здесь:

assertThat( new Whatever(TestPerson.class, ReadOnly.class) .foo(), is(bar));

в модульном тесте. Я подумал, что мне понадобится несколько разных таких вызовов, которые отличаются только вторым аргументом. Поэтому я подумал создать вспомогательный метод, чтобы я мог сделать

assertThat( makeFor(ReadOnly.class) .foo(), is(bar));

Я хотел использовать для этого возможности рефакторинга IntelliJ, но при выборе new Whatever.... .class) и выборе Извлечь метод оба параметра будут «жестко закодированы» в сгенерированном методе. Но я хочу, чтобы только первый параметр был жестко задан, а второй - параметром для нового метода.

Теперь мне интересно: есть ли изящный способ сделать это с помощью магических действий по рефакторингу IntelliJ? Без меня вручную добавить параметр после извлечения этого метода?

1 Ответ

2 голосов
/ 06 июня 2019

Вы должны объединить два действия по рефакторингу, и изучение различных комбинаций является ключом к быстрому и быстрому рефакторингу.

Мне приходят в голову две разные комбинации:

  1. Вы используете рефакторинг extract method (alt+ctrl+m), а после извлечения этого метода вы выбираете ReadOnly.class, используя рефакторинг extract parameter (alt+ctrl+p).

  2. Вы извлекаете ReadOnly.class в качестве переменной с помощью рефакторинга extract variable (alt+ctrl+v). Затем вы выбираете код new Wahtever(... и используете extract method (alt+ctrl+m) и, наконец, выбираете извлеченную переменную и используете inline variable (alt+ctrl+n).

При использовании 1. рабочего процесса у вас есть шанс, что Intellij Idea обнаружит дубликаты и предложит изменение подписи, а также извлечет другие методы. Это зависит от того, насколько похожи вызовы методов.

Кстати: это знание, чтобы раскрыть силу вашей IDE. Я предполагаю, что я набираю менее половины своего кода. Остальное генерируется действиями рефакторинга и генераторами.

Пример:

null проверка через завершение постфикса:

someObject.null <tab>

приведет к:

if (someObject != null) {
    <CURSOR>
}

Живые шаблоны - это еще один способ хранения одинаковых шаблонов кода в исполняемом виде.

...