Изменить порядок параметров метода в IntelliJ с помощью сочетания клавиш


92

В IntelliJ я могу легко изменить порядок операторов (или целых методов для этой части), нажав + Shift+ (или + Shift+ ).

Мне было интересно, есть ли ярлык, позволяющий так же легко изменить порядок параметров метода, чтобы

public void sth(String a, String b) {...}

станет

public void sth(String b, String a) {...}

с помощью сочетания клавиш (при условии, что мой курсор находится на одном из параметров).

Мне было бы достаточно, если бы IntelliJ просто изменил порядок параметров. То есть, это не должно запускать целую вещь Refactor> Change method signature .


1
Как это должно вести себя при наличии трех или более параметров? :)
Константин Йовков

2
Скажем, мой курсор находится на втором параметре: сдвинув его вверх, он должен стать первым. Сдвинув его вниз, он должен стать последним.
Штефан Хаберл

2
Один параметр перемещался вверх или вниз за раз! Я бы хотел иметь возможность сделать этот подвиг!
Пер Эрикссон,

1
Ctrl+F6а потом Alt+Upили Alt+Downпараметр переместить?
Любомир Шайдарев

1
Да, чаще, чем вы думаете. Когда я начинаю конкретизировать метод, я обычно Alt-Enter добавляю дополнительные параметры, когда это необходимо. Когда я закончу, я переставляю параметры в более логичном порядке. Кроме того, я думаю, было бы неплохо иметь этот ярлык и для вызовов методов. (Чувак, как часто я ошибался при работе с устаревшими API-интерфейсами с более чем 4 или 5 параметрами одного типа! Угу!)
Стефан Хаберл,

Ответы:


155

Начиная с IDEA 16 EAP, для этого есть действие. Это в меню:

Код | Переместить элемент влево / вправо

Сочетания клавиш: Alt+ Ctrl+ Shift+ Left/Right( Alt+ Cmd+ Shift+ Left/Rightдля OSX).

См. Http://blog.jetbrains.com/idea/2016/01/intellij-idea-16-eap-improves-editor-and-vcs-integration/ для получения дополнительных сведений.


Думаю, мне придется подождать еще немного, пока IDEA 16 не выйдет в открытый доступ, но это отличные новости!
Стефан Хаберл

EAP уже в дикой природе, можете попробовать :) Не думаю, что до релиза уйдет больше 2 месяцев.
Петр Громов

4
Хорошо, но ответ Любомира Шайдарева: stackoverflow.com/a/35359882/4024146 намного лучше, потому что он делает рефакторинг и меняет зависимости от изменения параметров. Это просто параметры переключения для этого метода, но не вызовы методов из других методов. Для этого не нужно делать макрос, просто CTRL + F6 и ALT + ↓
mtrakal

1
@mtrakal это разные вещи. Когда я составляю метод, мне не нужен тяжелый (медленный) рефакторинг - я просто хочу легко перемещать параметры. Настоящая проблема с этим в том, что у меня часто есть параметры в отдельных строках, поэтому это не работает. (Я действительно хочу предыдущий ход и следующий ход, а не левый и правый.)
Джеймс Мур,

Если у вас есть несколько курсоров на нескольких параметрах разных методов, их можно перемещать вместе.
WesternGun

16

Я не уверен, возможно ли это в IDEA, но вы можете попробовать использовать макросы редактора для двухпараметрических методов:

  • Редактор -> Макросы -> Начать запись макроса
  • Запишите свой макрос:
    • Ctrl+, F6чтобы открыть диалоговое окно Изменить подпись
    • Alt+ поменять местами первый и второй параметр
    • Tabчтобы деактивировать вкладку Parameters и позволить кнопке Refactor получить фокус
    • Enter закрыть диалог при выполнении рефакторинга
  • Редактор -> Макросы -> Остановить запись макроса и дать имя вашему макросу, скажем, «Поменять местами параметры метода 1 и 2».

Затем войдите в свой макрос через меню « Редактор» -> «Макросы» или назначьте ему собственный ярлык в « Настройки» -> «Раскладка» -> «Главное меню» / «Правка» / «Макросы» / «Параметры метода обмена 1 и 2» . Мне это кажется очень грязным и бесконтекстным способом, но, возможно, он может вам немного помочь.


11

В Ubuntu 18.04 ярлык по умолчанию - Ctrl + Alt + Shift + Super + Left / Right для перемещения аргумента влево или вправо в позиции.

Это сделано так, чтобы не конфликтовать с некоторыми ярлыками нового уровня ОС.


1
спасибо, даже несмотря на то, что это требует гимнастики пальцев, это намного лучше, чем необходимость привязать отдельный ключ.
gMale
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.