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: они на самом деле являются одним и тем же контролером, а не двумя отдельными контролерами, которые объединяются вместе.