Android Studio / lint не ловит все ошибки при использовании IntDef - PullRequest
0 голосов
/ 26 апреля 2019

Я ожидал, что lint (не компилятор) будет ловить определенные неправильные назначения при использовании IntDefs. Android Studio / lint правильно перехватывает следующее:

@IntDef({MyintDef.A, MyintDef.B})
@Retention(RetentionPolicy.SOURCE)
public @interface MyintDef {
  int A = 0;
  int B = 1;
}

private static void assignMyEnum() {
  @MyintDef int m = MyintDef.A;
  @MyintDef int n = 10; // caught by lint + Android Studio
}

@MyintDef
private static int returnMyEnum() {
  return 10; // caught by lint + Android Studio
}

Но не следующее:

private static void assignMyEnum() {
  @MyintDef int m = MyintDef.A;
  @MyintDef int n = MyintDef.A + 10; // not caught by lint + Android Studio
}

@MyintDef
private static int returnMyEnum() {
  return MyintDef.A + 10; // not caught by lint + Android Studio
}

Даже после запуска lint вручную в командной строке ./gradlew lint второй блок кода не помечает никаких ошибок.

Я знаю, что перечисленные аннотации - это просто проверки lint, как указывалось здесь и здесь , но ожидал ручного запуска lint в командной строке, чтобы отметить их в отчете об ошибке.

У меня вопрос двоякий:

  1. Нужно ли что-либо включать в AS или устанавливать какой-либо флаг при запуске lint из командной строки, чтобы увидеть ошибки во втором примере кода?
  2. Если во втором примере кода нет способа отловить ошибки, действительно ли перечисляемые типы действительно того стоят, учитывая, что мы получаем некоторое пространство, но много теряем в безопасности типов?
...