2015-05-19 2 views
4

Для некоторых классов в моем проекте я переопределяю toString() метод. Главным образом цель - улучшить читаемость журналов. Это означает, что такие строки не локализованы и никогда не должны отображаться в пользовательском интерфейсе. Кроме того, я обеспокоен тем, что вместо него будет вызываться неявный toString(), например. когда он сериализуется (используя некоторую стороннюю библиотеку).Можно ли перечислить все случаи, когда неявный toString() вызывается для моего класса?

Есть ли способ перечислить все случаи, когда вызывается toString()? Лучше, иметь это только для классов в моей упаковке или иным образом фильтровать тривиальные случаи, например log("index=" + index)? Или запретить неявное toString() для определенных классов в моем проекте?

Мой проект фактически использует Java 7 и скомпилирован для Android. В настоящее время я использую Eclipse (ADT), и у меня включен анализ Lint. Но я открыт для переключения инструментов и сред.

+0

Что было бы неправильно с переопределением 'toString()' для всех классов, которые вы создали и записывали в журнал каждый раз при вызове? –

+0

Я думаю, вы могли бы начать с JDT AST, чтобы найти инфиксные выражения, содержащие оператор плюс. Оттуда вы можете использовать реализацию компилятора jdt java, чтобы определить, является ли выражение infix конкатенацией строк. Я не уверен, есть ли еще какие-то неявные вызовы toString() ', которые нужно искать. – SpaceTrucker

+0

Вы также можете отсканировать файлы '.class' и отладить информацию. Конкатенация строки выражения infix отображается на вызовы строковых построителей. – SpaceTrucker

ответ

0

Обновлено до Android Studio v. 1.3. Он показывает предупреждения о неявном toString() точно так, как я хотел!

3

Вы можете попробовать JArchitect и его функцию CQLinq, например, вы можете выполнить запрос так:

с т в методах, где m.IsUsing ("java.lang.String.toString()") выберите m

Вы также можете определить расширенные запросы, в которых вы можете искать результаты в определенных пакетах или классах.

+0

Я все еще не мог найти простой способ работать с JArchitect с проектом Android. –

+0

Вы могли бы проанализировать файл jar или в случае, если файл apk преобразует его в файл jar. –

+0

Я нашел легкую альтернативу. Спасибо за ваш вклад. –