Как быстрее всего определить, на какой код повлияет рефакторинг?

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

Прямо сейчас я использую

grep "classname" find . -regex .*\.java> uses_classname.txt

чтобы найти код, на который может повлиять изменение класса. Если при этом возвращено всего несколько строк, я могу посмотреть его вручную как есть. В противном случае я снова могу использовать команду grep, чтобы найти конкретные методы, которые я изменяю. Есть лучший способ сделать это?


person Anonymous    schedule 03.01.2012    source источник
comment
Предполагая, что под «рефакторингом» вы подразумеваете «переименование»: в Eclipse щелкните правой кнопкой мыши имя метода, Ссылки - ›Рабочая область?   -  person The Nail    schedule 04.01.2012
comment
А как насчет ... выполнения рефакторинга? Если вы используете контроль версий и у вас нет незафиксированных изменений, рефакторинг затронул все измененные файлы.   -  person Tomasz Nurkiewicz    schedule 04.01.2012
comment
Томаша, это предполагает, что вы извлекли всю базу кода в свою рабочую область, а не часть базы кода, которая компилируется независимо. (Что само по себе может быть не лучшей практикой.)   -  person Anonymous    schedule 04.01.2012
comment
@TheNail, я не имею в виду переименование, я имею в виду, возможно, устранение метода или изменение параметров или что-то в этом роде. Очевидно, еще один возможный рефакторинг - оставить все как есть и добавить новые методы, чтобы можно было постепенно использовать старый в меньшем количестве кода.   -  person Anonymous    schedule 04.01.2012
comment
Хорошо, тогда эта функция Eclipse также должна быть полезной. Он просто показывает вам, где в настоящее время используется метод. Кстати, grep-метод страдает тем же ограничением, что и рефакторинг в Eclipse, если вы не проверили часть кода.   -  person The Nail    schedule 04.01.2012


Ответы (2)


[Я здесь просто немного библиотекаря:]

Поиск ссылок на метод / класс Java:

Как найти все методы, вызывающие данный метод в Java?

Как найти ссылки на класс в Eclipse? < / а>

Ссылки на аннотации Java:

Как проверить ссылки на аннотированные методы

Поиск ссылок на «производные» методы в Eclipse:

Специфика Eclipse: есть можно ли в классе найти упоминания об использовании производных методов?

Как это сделать с помощью VIM:

Можно ли найти применение классов или методов Java в VIM?

И с Emacs:

Как можно Я нахожу ссылки на класс, метод, переменную в Emacs с помощью Etags?

Поиск (количество) ссылок на метод в C #:

Как вы программно определить количество ссылок на метод с C #

Приятно читать: как найти методы, которые не используются в C # /. NET:

Найдите неиспользуемый код

Есть ли инструмент для поиска функции без ссылок (мертвый, устаревший код) в приложении C #?

По рефакторингу кода PHP:

Инструменты для рефакторинга кода PHP

Поиск ссылок в Smalltalk:

Найдите ссылки на строку / символ / метод

Поиск ссылок в (Apple) Xcode кажется популярным вопросом:

Найдите ссылки на методы в Xcode

Xcode: просмотреть ссылки для переменной?

Поиск всех ссылок на переменную или метод в Xcode4

person The Nail    schedule 03.01.2012

Хорошим решением является использование JUnit и практика разработка через тестирование. После рефакторинга повторный запуск ваших тестовых случаев покажет вам, были ли повреждены какие-либо существующие функции. Более того, поскольку вы на самом деле тестируете код, а не выполняете поиск по именам методов, вы можете получить полную обратную трассировку, что значительно упрощает отладку. Хорошее введение в JUnit можно найти здесь.

person user2398029    schedule 05.01.2012
comment
Мне нравится идея использования модульных тестов для проверки того, что все по-прежнему работает после рефакторинга, но это не дает ответа на вопрос: сколько времени это займет? на который обычно отвечают, зная, какие классы будут подвергнуты рефакторингу и сколько раз они используются в вашем программном обеспечении. - person Alexis Wilke; 18.04.2018