Рефакторинг исходного кода Java на 7000 ссылок - PullRequest
21 голосов
/ 11 октября 2010

Мне нужно изменить сигнатуру метода, используемого во всей кодовой базе.

В частности, метод void log(String) будет принимать два дополнительных аргумента (Class c, String methodName), которые должны быть предоставлены вызывающей сторонойв зависимости от метода, где он вызывается.Я не могу просто передать null или аналогичный.

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

Насколько я могу судить, плагин Eclipse для рефакторинга Eclipse не подходит для этой задачи, но я действительно хочу его автоматизировать.
Итак, как можноЯ выполнил работу?

Ответы [ 12 ]

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

Я бы искал и заменил log( на log(@class, @methodname,

Затем напишите небольшой скрипт на любом языке (даже java), чтобы найти имя класса и имена методов и заменить токены @class и @method ...

Удачи

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

На самом деле ваша проблема не в том, чтобы использовать механизм click'n'play, который позволит вам заменить все вхождения

log("some weird message");

на

log(this.getClass(), new Exception().getStackTrace()[1].getMethodName());

, так как у него малошансы поработать над различными случаями (например, статическими методами).

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

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

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