2016-04-08 2 views
1

Иногда lint производит ложные предупреждения, если поле работает через кучу аннотаций. Для общего примера:Как настроить lint для игнорирования конкретных случаев?

@SerializedName("id") @Expose private Integer id; 

поле id назначается только через gson.fromJson(). Такая операция невидима для lint, поэтому она выводит предупреждение Так что я хочу настроить lint в этом конкретном случае игнорировать проверки, если поле когда-либо назначено, если оно аннотируется @SearializedName (пожалуйста, не предлагайте raw @SuppressWarnings("unused"), который должен задавать вручную для каждого поля и блокировать проверки, если поле когда-либо используется)

ответ

2

Gson сериализует поля, используя отражение, которое происходит во время выполнения. Это UnusedAssignment инспекция находит переменные, которые удовлетворяют любому из следующих критериев:

  • переменная никогда не будет читать после присвоения
  • значение всегда переписывается с другим назначением до следующей переменной читать
  • переменная инициализатор является избыточным (по одной из двух причин) - переменная никогда не используется.

Ваш единственный вариант, чтобы избавиться от предупреждений для этой конкретной инспекции, чтобы подавить их, либо путем обновления lint.xml или через @SuppressWarnings("unused"). Если вы действительно не хотите делать что-либо из этого, тогда может быть возможно написать custom Lint inspection, который игнорирует поля с аннотацией @SerializedName.

Недостаток этого подхода заключается в том, что если вы хотите использовать @SerializedName в классе, который не сериализуется Gson, вы больше не получите предупреждение, если переменная не используется. Это также намного сложнее, чем добавление @SuppressWarnings("unused") к началу ваших классов моделей GSON.

Смежные вопросы