IntelliJ: реорганизуйте подпись, чтобы использовать свойства параметров

#intellij-idea #keyboard-shortcuts

#intellij-idea #сочетания клавиш

Вопрос:

Возможно ли в IntelliJ выполнить такой рефакторинг

 public class Demo {

    public long sum(Model model) {
        int a = model.getA();
        int b = model.getB();
        System.out.println(model.getA());
        System.out.println(model.getB());
        return (long) a   b;
    }

    //refactor to

    public long sum(int a, int b) {
        System.out.println(a);
        System.out.println(b);
        return (long) a   b;
    }

    private static class Model {
        private int a;
        private int b;
        private int c;

        //getter amp; boilerplate
    }
}
  

было бы неплохо, ИМХО, уменьшить сложность в определенных случаях.

Некоторое время гуглил и пробовал различные диалоги по рефакторингу — пока не смог найти ничего лучше, чем «Изменить подпись».

РЕДАКТИРОВАТЬ: уточненный пример, позволяющий использовать несколько вариантов для каждого параметра

Ответ №1:

Отличный вопрос!
Да, это возможно с помощью комбинации Extract parameter и Inline variable .

  1. Отправная точка

    введите описание изображения здесь

  2. Поверх getA() , right click > Refactor > Extract > Parameter (или ctrl alt p в Windows).
    Результатом является

    введите описание изображения здесь

    Сделайте то же самое с getB() .

  3. Вызовите встроенную переменную для быстрого исправления / рефакторинга локальных переменных (ctrl alt n в Windows)

    введите описание изображения здесь

  4. Полюбуйтесь результатом и переименуйте соответственно

    введите описание изображения здесь


Я могу сделать все это за 5 секунд, используя сочетания клавиш и навигацию с быстрыми исправлениями 😉

Комментарии:

1. Спасибо за ваш ответ! В то время как ‘Extract Variable’ предлагает заменить несколько вхождений, это, похоже, не относится к ‘Extract Parameter’ .. все еще любопытно, есть ли какая-либо еще более быстрая альтернатива 😉

2. @FranzEbner к сожалению, на данный момент альтернативы нет. Вы все еще можете открыть запрос функции на Youtrack, я поддержу.

3. @FranzEbner кстати, даже при многократном использовании это работает нормально

4. на данный момент это действительно лучший вариант, спасибо за запрос функции