NullnessChecker: как отключить только проверку инициализации?

Я ссылаюсь на пример nullness в docs (версия для checker-framework: 2.1.14)

Когда я запускаю пример, как рекомендуется, чтобы проверить NullnessExampleWithWarnings.java:

javac -processor org.checkerframework.checker.nullness.NullnessChecker docs/examples/NullnessExampleWithWarnings.java

Я получаю ожидаемые ошибки:

..\..\docs\examples\NullnessExampleWithWarnings.java:23: error: [assignment.type.incompatible] incompatible types in assignment.
        foo = bar;
              ^
  found   : @FBCBottom @Nullable String
  required: @UnknownInitialization @NonNull String
..\..\docs\examples\NullnessExampleWithWarnings.java:33: error: [argument.type.incompatible] incompatible types in argument.
        foo.add(quux);
                ^
  found   : @FBCBottom @Nullable String
  required: @Initialized @NonNull String
2 errors

Теперь я отключаю проверку инициализации: с AsuppressWarnings=initialization,

javac -processor org.checkerframework.checker.nullness.NullnessChecker -AsuppressWarnings=initialization docs/examples/NullnessExampleWithWarnings.java

Но это также отключает нулевые проверки, и сборка больше не сообщает об ошибках.

Как я могу отключить проверку инициализации, но сохранить нулевые проверки?

1 ответ

Решение

В разделах 3.1 и 3.8 руководства Checker Framework предлагается использовать -AsuppressWarnings=uninitialized скорее, чем -AsuppressWarnings=initialization, Это работает для вашего примера.

Причиной этой рекомендации является деталь реализации контроллеров Nullness и Initialization: они на самом деле являются одним и тем же контролером, а не двумя отдельными контролерами, которые объединяются вместе.

Другие вопросы по тегам