2016-04-08 8 views
1

Manchmal erzeugt Lint falsche Warnungen, wenn das Feld über eine Reihe von Annotationen bedient wird. Für ein typisches Beispiel:Wie konfiguriere ich lint, um bestimmte Fälle zu ignorieren?

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

Feld id nur über gson.fromJson() zugewiesen. Solcher Vorgang ist unsichtbar für Flusen, so dass es Warnung variable id is never assigned So möchte ich lint, in diesem speziellen Fall zu ignorieren, wenn Feld überhaupt zugewiesen ist, wenn es mit @SearializedName annotiert ist (bitte nicht vorschlagen, roh @SuppressWarnings("unused"), die muss für jedes Feld manuell gesetzt werden und Überprüfungen blockieren, wenn das Feld jemals verwendet wird)

Antwort

2

Gson serialisiert Felder mit Reflektion, die zur Laufzeit stattfindet. Das UnusedAssignment Inspektion findet Variablen, die eine der folgenden Kriterien erfüllen:

  • die Variable nie immer nach der Abtretung
  • der Wert gelesen wird mit einer anderen Zuordnung überschrieben, bevor die nächste Variable
  • die Variableninitialisierer lesen ist redundant (aus einem der beiden oben genannten Gründe) - die Variable wird nie verwendet.

Ihre einzige Möglichkeit, Warnungen für diese spezielle Prüfung, um loszuwerden, ist, sie zu unterdrücken, entweder durch Ihre lint.xml Aktualisierung oder über @SuppressWarnings("unused"). Wenn Sie keines dieser Dinge tun möchten, ist es möglicherweise möglich, eine custom Lint inspection zu schreiben, die Felder mit einer @SerializedName Annotation ignoriert.

Der Nachteil dieses Ansatzes ist, wenn Sie @SerializedName in einer Klasse verwenden möchten, die nicht von Gson serialisiert wird, erhalten Sie keine Warnung mehr, wenn eine Variable nicht verwendet wird. Es ist auch viel komplizierter als das Hinzufügen von @SuppressWarnings("unused") an die Spitze Ihrer GSON-Modellklassen.

Verwandte Themen