Как в IDEA переименовать пересекающиеся по названию пакеты?

Имеется многомодульный java-проект со следующими пакетами:

Module A:
    ru.site.my.source.*
Module B:
    ru.site.my.source.*
Module C:
    ru.site.my.source.*

Несмотря на то, что на первый взгляд эти пакеты являются разными (потому что разнесены по разным модулям), по факту они являются одним пакетом.

Это создаёт проблемы. Например, если я попытаюсь переименовать пакет ru.site.my.source.super в Module A, то такой же пакет переименуется и в остальных модулях, потому что это и есть тот же самый пакет. Поэтому я сейчас пытаюсь разграничить пакеты в разных модулях, получив на выходе такой результат:

Module A:
    ru.site.my.source.one.*
Module B:
    ru.site.my.source.two.*
Module C:
    ru.site.my.source.three.*

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

Есть ли в IDEA какие-либо инструменты, которые позволят мне ускорить данный процесс?


Ответы (3 шт):

Автор решения: Roman Konoval

При использовании Refactor -> Rename... выбирайте не Refactor, а Preview:

rename preview

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

→ Ссылка
Автор решения: Zhenyria

Ответ @Roman Konoval хорош, но не для моего случая, так как при просмотре окна Preview refactoring выборочное удаление изменений было запрещено (по-видимому, IDEA просто не понимала, в каком пакете оставлять классы, которые я удалял из списка изменений, так как наш старый пакет переименовывается).

Задача решается довольно тривиально.

Выбираем для пакета Refactor -> Rename, а когда нас спрашивают, что именно мы хотим переименовать: пакет или директорию, то мы выбираем директорию. И переименовываем, например, ru.site.my.source в ru.site.my.one.

Всё, пакет стал уникальным, и теперь его можно переименовывать как угодно.

→ Ссылка
Автор решения: keekkenen

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

→ Ссылка