Могу ли я автоматически провести рефакторинг всего проекта Java и переименовать параметры метода в верхнем регистре в нижний? - PullRequest
11 голосов
/ 01 октября 2010

Я работаю в Java-проекте, где большая часть кода была написана в стиле форматирования, который мне не нравится (а также нестандартен), а именно все параметры метода указаны в верхнем регистре (а также все локальныепеременные).

В IntellJ я могу использовать «Анализировать -> Проверить код» и фактически найти все вхождения параметров метода в верхнем регистре (более 1000).

Чтобы исправить одно вхождение, я могу сделать «рефакторинг> переименовать параметр», и он отлично работает (давайте предположим, что нет перекрытия).

Есть ли способ автоматического выполнения этого рефактора (например:переименовать параметр метода, начинающийся с заглавных букв, с тем же именем, начинающимся с строчных)?

Ответы [ 4 ]

8 голосов
/ 01 октября 2010

Используйте анализатор исходного кода

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

Для каждого исходного файла Java,проанализируйте его в CompilationUnit, создайте Visitor , возможно, используя ModifierVisitorAdapter в качестве базового класса, и переопределите (как минимум) visit(MethodDeclaration, arg).Затем запишите измененный CompilationUnit в новый файл и затем выполните diff.

Я бы посоветовал не изменять исходный файл, но создание дерева теневых файлов может быть хорошей идеей (например, старый файл: src/main/java/com/mycompany/MyClass.java, новый файл src/main/refactored/com/mycompany/MyClass.java, таким образом вы можете различать все каталоги).

5 голосов
/ 01 октября 2010

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

  1. Если это командное усилие, сообщите вашей команде.
  2. Если это дляработодатель, сообщите своему боссу.
  3. Если это проверено в системе управления версиями, поймите, что у вас будут разногласия, выходящие из wazoo.
  4. Если это не проверено в системе управления версиями,отметьте его.
  5. Сделайте резервную копию, прежде чем вносить какие-либо изменения.
  6. Проверьте, есть ли у вас какие-либо тесты для проверки до и после того, как поведение не изменилось.

Это опасный рефакторинг.Быть осторожен.

0 голосов
/ 01 октября 2010

Я провел много таких рефакторингов в довольно большом масштабе файлов, используя TextPad или WildPad, и кучу регулярных замен всех.Всегда работал для меня!

Я уверен, что если код сначала отформатирован с использованием IDE, такой как Eclipse (если он не отформатирован должным образом), а затем reg-ex с подписью методов (область действия,Возвращаемый тип, имя, скобки, список аргументов, скобки) могут быть разработаны, ваша работа будет выполнена в течение нескольких секунд с помощью этих инструментов.Возможно, вам понадобится более одного набора для замены всех экземпляров.

Единственное занятие, требующее времени, - это создать такой набор рег. Ex.

Надеюсь, это поможет!

0 голосов
/ 01 октября 2010

Мне неизвестно о какой-либо прямой поддержке такого рефакторинга "из коробки" в IDE.Поскольку большинство IDE поддерживают рефакторинг имен (который используется регулярно).Вам может понадобиться написать некоторый плагин IDE, который мог бы просматривать исходный код (AST) и вызывать рефакторинг переименования за сценой для таких имен параметров, соответствующих такому формату.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...