support studio not nonnull annotation android casting annotations android-support-library suppress

studio - android support annotation nullable



¿Cómo deshabilito las verificaciones de anotación de Android @IntDef en casos especiales? (2)

Uno de estos casos es leer un int de un paquete y almacenarlo en la variable restringida por la anotación @IndDef:

public class MainActivity extends ActionBarActivity { @IntDef({STATE_IDLE, STATE_PLAYING, STATE_RECORDING}) @Retention(RetentionPolicy.SOURCE) public @interface State {} public static final int STATE_IDLE = 0; public static final int STATE_PLAYING = 1; public static final int STATE_RECORDING = 2; @MainActivity.State int fPlayerState = STATE_IDLE; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState != null) fPlayerState = savedInstanceState.getInt(BUNDLE_STATE); //Causes "Must be one of: ..." error

Debe haber alguna forma de suprimir la comprobación o la conversión de int a @ MainActivity.State int para establecer la variable en la última línea.

El otro caso es escribir una prueba negativa que llame a una función con un parámetro anotado que pasa intencionalmente el parámetro incorrecto para probar que la excepción se produce en tal caso. Debe haber una manera de suprimir la verificación de anotaciones para compilar dicha prueba.


He encontrado la manera de suprimir los controles de anotación. En realidad, hay tres de ellos:

  1. Agregue @SuppressWarnings("ResourceType") antes de la definición de su clase. En mi caso:

    @SuppressWarnings("ResourceType") public class MainActivity extends ActionBarActivity { ... }

  2. Agregue @SuppressWarnings("ResourceType") antes de la definición de su método. En mi caso:

    @Override @SuppressWarnings("ResourceType") protected void onCreate(Bundle savedInstanceState) { ... }

Estos dos enfoques no funcionan para mí, porque quiero verificaciones de anotación en todo mi código, excepto por una sola declaración.

  1. Para suprimir un cheque en una sola línea, agregue un comentario con formato especial (!!!).

    //noinspection ResourceType fState = savedInstanceState.getInt(BUNDLE_STATE);


@Status int state1=bundle.getInt(STATE_ELEMENT1); setStatus1(state1); //instead of direct setStatus1(bundle.getInt(STATE_ELEMENT1);