2017-02-21 5 views
0

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

В одном конкретном примере у меня есть куча классов с несколькими сотнями методов проверки достоверности. Валидация происходит в основном путем перечисления всех методов этих классов посредством отражения и выполнения одного за другим их на данном объекте. (Это сложнее, но это основная идея). Теперь моя IDE, по понятным причинам, маркирует всех и каждого из этих методов как «неиспользуемых», потому что их никогда не называют напрямую, только через отражение.

Аналогичная проблема возникает в другой части программы, где проживает несколько десятков вспомогательных классов, некоторые из которых почти наверняка неиспользуемы и могут быть удалены. Но: В некоторых редких случаях поля этих классов доступны через отражение, а обычные функции поиска IDE не могут найти эти обычаи (опять же: очень понятно).

Я знаю, что IDE не сможет решить эту проблему без посторонней помощи. Отсюда мой вопрос, существуют ли уже установленные способы, например аннотации, чтобы четко обозначить эти случаи. Конечно, я мог бы определить такую ​​аннотацию самостоятельно, но я бы предпочел пойти с принятым стандартом, если он существует. Есть ли даже IDE, который может распознать их и автоматически предупредить, если я делаю такие вещи?

+0

Ну, в версии Eclipse я использую * любую * аннотацию на неиспользуемом члене, позволяет предупреждению уйти, ну, кроме тех, у которых явно не будет «семантически обработан», т. Е. Кроме '@ Устарело'. Это очень удобно, так как нет ничего необычного в том, чтобы иметь уже конкретные аннотации проекта, контролирующие автоматическую обработку. – Holger

ответ

1

Нет, не стандарт способ отметить косвенное управление потоком (отражение, Android, намерения обратных вызовов и т.д.).

Есть некоторые инструменты, которые предоставляют свои собственные способы анализа потока непрямого контроля.

Например, в 10 используется @MethodVal аннотация, чтобы указать возможные цели отражающего вызова. Он также имеет способы указать Android intents.

1

Вы обычно аннотировать эти классы с @SuppressWarnings("unused"), чтобы избавиться от IDE предупреждений

+0

Избавление от предупреждений не является основным моментом моего вопроса. Меня больше интересует, как выражать семантические отношения «X использует Y» между классами/методами/... –