Найти все способы использования метода toString()

У меня есть огромный проект с классом, который широко используется везде внутри этого проекта. Этот класс определяет метод toString(), который выводит много информации. Я хочу определить другой метод, скажем, toShortString() и заменить все вхождения, где с этим вызовом метода вызывается оригинальный toString().

Проблема заключается в том, что существует много кода, который выглядит следующим образом:

log.debug("Order issued: " + order);
log.debug("Loaded list of orders: " + orders);

где order - экземпляр этого объекта, а orders - список таких объектов.

Есть ли способ найти все такие вхождения?

Любые предложения приветствуются. IDE - это идея IntelliJ, если это имеет значение.

Ответ 1

Просто переопределите тело метода toString() в классе Order.

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

Итак, вы хотите зарегистрировать короткую распечатку и отладить полный (оригинал). Оба вызова toString(). Затем вы можете попытаться заглянуть внутрь трассировки стека вызовов, чтобы решить, откуда он вызван. Используйте Thread.currentThread().getStackTrace() для доступа к текущей трассировке стека.

Скажем, если какой-либо из последних 10 элементов stacktrace принадлежит вам классу Log, он вызывается для ведения журнала, затем вы можете распечатать короткую распечатку. В противном случае выполните полную распечатку.

Да, хорошей практикой является перенос различных версий toString() в отдельные методы.

Ответ 2

Вместо замены всех вхождений toString(), которые были бы подвержены ошибкам (вы наверняка пропустили бы некоторые), а некоторые действительно трудно заменить (например, объекты System.out.println() на List объектов Order всегда вызывать только toString()) Я предлагаю вам изменить сам toString() на вызов toShortString().

Переместите весь код внутри toString() в другую функцию с именем toLongString(), а затем используйте эту функцию, если вам нужно иметь подробное представление String объектов Order.

Ответ 3

Я знаю, что немного опоздал, но я нашел законный способ сделать это в IDEA:

  • Внутри класса mark toString метод как @Deprecated.
  • AnalyzeRun inspection by name → выберите Deprecated API usage.

Viola! Он перечислит все применения любых устаревших API (надеюсь, вы этого не сделаете), который, конечно, включает в себя toString, который вы просто аннотировали. Не забудьте удалить аннотацию.

P.S. не будут отображаться неявные вызовы, хотя