Могу ли я автоматически реорганизовать весь проект java и переименовать параметры верхнего регистра в нижний регистр?
Я работаю в проекте java, где большая часть кода была написана со стилем форматирования, который мне не нравится (и также не стандартным), а именно все параметры метода находятся в верхнем регистре (а также все локальные переменных).
В IntellJ я могу использовать "Analyze → Inspect Code" и фактически найти все вхождения параметров верхнего регистра (более 1000).
Чтобы исправить одно вхождение, я могу сделать "refactor > rename parameter", и он отлично работает (допустим, что перекрытие не перекрывается).
Есть ли способ автоматически выполнить этот рефактор (например: параметр метода переименования, начиная с верхнего регистра с тем же именем, начиная с нижнего регистра)?
Ответы
Ответ 1
Использовать исходный парсер
Я думаю, что вам нужно использовать парсер исходного кода, например javaparser, чтобы сделать это.
Для каждого исходного файла java проанализируйте его на CompilationUnit, создать посетителя, возможно используя ModifierVisitorAdapter в качестве базового класса и переопределить (по крайней мере) visit(MethodDeclaration, arg)
. Затем запишите измененный файл CompilationUnit в новый файл и затем выполните diff.
Я бы посоветовал не изменять исходный исходный файл, но создать дерево теневого файла может быть хорошей идеей (например, старый файл: src/main/java/com/mycompany/MyClass.java
, новый файл src/main/refactored/com/mycompany/MyClass.java
, таким образом вы можете различать все каталоги).
Ответ 2
Я бы посоветовал вам подумать о нескольких вещах, прежде чем что-либо сделать:
- Если это командная работа, сообщите своей команде.
- Если это для работодателя, сообщите об этом своему боссу.
- Если это проверено в системе управления версиями, поймите, что вы будете иметь diffs, выходящий из wazoo.
- Если он не проверен в системе управления версиями, проверьте его.
- Сделайте резервную копию, прежде чем вносить какие-либо изменения.
- Посмотрите, есть ли у вас какие-либо тесты для проверки до и после того, как поведение не изменилось.
Это опасный рефакторинг. Быть осторожен.
Ответ 3
Мне не известно о какой-либо прямой поддержке такого рефакторинга из ящиков в IDE. Поскольку большинство IDE будут поддерживать рефакторинг имен (которые регулярно используются). Возможно, вам придется написать некоторый плагин IDE, который мог бы просматривать исходный код (AST) и вызывать рефакторинг переименования за сценой для таких имен параметров, соответствующих этому формату.
Ответ 4
Я сделал много таких рефакторингов в довольно больших размерах файлов, используя TextPad или WildPad, и кучу reg-ex replace-all. Всегда работал на меня!
Я уверен, что если код сначала отформатирован с использованием IDE, например Eclipse (если он не отформатирован должным образом), а затем reg-ex с использованием подписи методов (scope, return-type, name, список arg, скобка), ваша работа будет выполнена в считанные секунды с помощью этих инструментов. Возможно, вам понадобится несколько заменяющих наборов reg-ex.
Единственной операцией, связанной с определением времени, было бы создание такого набора регистров.
Надеюсь, это поможет!