Я ожидал, что 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 в командной строке, чтобы отметить их в отчете об ошибке.
У меня вопрос двоякий:
- Нужно ли что-либо включать в AS или устанавливать какой-либо флаг при запуске lint из командной строки, чтобы увидеть ошибки во втором примере кода?
- Если во втором примере кода нет способа отловить ошибки, действительно ли перечисляемые типы действительно того стоят, учитывая, что мы получаем некоторое пространство, но много теряем в безопасности типов?