From d966003b315361337c963e65739b0929e82228f5 Mon Sep 17 00:00:00 2001 From: Mitya Lyubarskiy Date: Tue, 16 Mar 2021 03:13:56 -0700 Subject: [PATCH] [nullsafe] Change "Field not initialized" error message Summary: `Initializer` annotation is an advanced feature that should be used sparingly. Let's remove it from the error message and hence discourage overuse Reviewed By: ngorogiannis Differential Revision: D27047431 fbshipit-source-id: 8eb7ba7ab --- infer/src/nullsafe/typeErr.ml | 2 +- .../java/nullsafe-annotation-graph/issues.exp | 6 +-- .../codetoanalyze/java/nullsafe/issues.exp | 50 +++++++++---------- 3 files changed, 29 insertions(+), 29 deletions(-) diff --git a/infer/src/nullsafe/typeErr.ml b/infer/src/nullsafe/typeErr.ml index 0819774cd..77e75543d 100644 --- a/infer/src/nullsafe/typeErr.ml +++ b/infer/src/nullsafe/typeErr.ml @@ -290,7 +290,7 @@ let make_nullsafe_issue_if_reportable_lazy ~nullsafe_mode err_instance = ~description: (Format.asprintf "Field %a is declared non-nullable, so it should be initialized in the \ - constructor or in an `@Initializer` method" + constructor" MF.pp_monospaced (Fieldname.get_field_name field_name)) ~issue_type:IssueType.eradicate_field_not_initialized ~loc diff --git a/infer/tests/codetoanalyze/java/nullsafe-annotation-graph/issues.exp b/infer/tests/codetoanalyze/java/nullsafe-annotation-graph/issues.exp index e7576a906..1643686a4 100644 --- a/infer/tests/codetoanalyze/java/nullsafe-annotation-graph/issues.exp +++ b/infer/tests/codetoanalyze/java/nullsafe-annotation-graph/issues.exp @@ -123,7 +123,7 @@ AnnotationGraph: codetoanalyze/java/nullsafe-annotation-graph/AnnotationGraph.java, Linters_dummy_method, 87, ERADICATE_META_CLASS_CAN_BE_NULLSAFE, no_bucket, ADVICE, [Congrats! `SomeExternalClass` is free of nullability issues. Mark it `@Nullsafe(Nullsafe.Mode.LOCAL)` to prevent regressions.], SomeExternalClass, codetoanalyze.java.nullsafe_annotation_graph, issues: 0, curr_mode: "Default", promote_mode: "Strict" -codetoanalyze/java/nullsafe-annotation-graph/AnnotationGraph.java, codetoanalyze.java.nullsafe_annotation_graph.AnnotationGraph.(), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `fieldD` is declared non-nullable, so it should be initialized in the constructor or in an `@Initializer` method], AnnotationGraph, codetoanalyze.java.nullsafe_annotation_graph, field:codetoanalyze.java.nullsafe_annotation_graph.AnnotationGraph.fieldD -codetoanalyze/java/nullsafe-annotation-graph/AnnotationGraph.java, codetoanalyze.java.nullsafe_annotation_graph.AnnotationGraph.(), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `fieldB` is declared non-nullable, so it should be initialized in the constructor or in an `@Initializer` method], AnnotationGraph, codetoanalyze.java.nullsafe_annotation_graph, field:codetoanalyze.java.nullsafe_annotation_graph.AnnotationGraph.fieldB -codetoanalyze/java/nullsafe-annotation-graph/AnnotationGraph.java, codetoanalyze.java.nullsafe_annotation_graph.AnnotationGraph.(), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `fieldA` is declared non-nullable, so it should be initialized in the constructor or in an `@Initializer` method], AnnotationGraph, codetoanalyze.java.nullsafe_annotation_graph, field:codetoanalyze.java.nullsafe_annotation_graph.AnnotationGraph.fieldA +codetoanalyze/java/nullsafe-annotation-graph/AnnotationGraph.java, codetoanalyze.java.nullsafe_annotation_graph.AnnotationGraph.(), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `fieldB` is declared non-nullable, so it should be initialized in the constructor], AnnotationGraph, codetoanalyze.java.nullsafe_annotation_graph, field:codetoanalyze.java.nullsafe_annotation_graph.AnnotationGraph.fieldB +codetoanalyze/java/nullsafe-annotation-graph/AnnotationGraph.java, codetoanalyze.java.nullsafe_annotation_graph.AnnotationGraph.(), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `fieldA` is declared non-nullable, so it should be initialized in the constructor], AnnotationGraph, codetoanalyze.java.nullsafe_annotation_graph, field:codetoanalyze.java.nullsafe_annotation_graph.AnnotationGraph.fieldA +codetoanalyze/java/nullsafe-annotation-graph/AnnotationGraph.java, codetoanalyze.java.nullsafe_annotation_graph.AnnotationGraph.(), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `fieldD` is declared non-nullable, so it should be initialized in the constructor], AnnotationGraph, codetoanalyze.java.nullsafe_annotation_graph, field:codetoanalyze.java.nullsafe_annotation_graph.AnnotationGraph.fieldD codetoanalyze/java/nullsafe-annotation-graph/AnnotationGraph.java, codetoanalyze.java.nullsafe_annotation_graph.AnnotationGraph.equals(java.lang.Object):boolean, 0, ERADICATE_INCONSISTENT_SUBCLASS_PARAMETER_ANNOTATION, no_bucket, WARNING, [Parameter `obj` is missing `@Nullable` declaration: according to the Java Specification, for any object `x` call `x.equals(null)` should properly return false.], AnnotationGraph, codetoanalyze.java.nullsafe_annotation_graph, inconsistent_param_index:0 diff --git a/infer/tests/codetoanalyze/java/nullsafe/issues.exp b/infer/tests/codetoanalyze/java/nullsafe/issues.exp index 55290865c..22fc76da7 100644 --- a/infer/tests/codetoanalyze/java/nullsafe/issues.exp +++ b/infer/tests/codetoanalyze/java/nullsafe/issues.exp @@ -4,7 +4,7 @@ codetoanalyze/java/nullsafe/AlternativeRecommendations.java, codetoanalyze.java. codetoanalyze/java/nullsafe/AlternativeRecommendations.java, codetoanalyze.java.nullsafe.AlternativeRecommendations.passingParam_ShouldSuggestAlternative(android.view.View):void, 1, ERADICATE_PARAMETER_NOT_NULLABLE, no_bucket, WARNING, [`AlternativeRecommendations.acceptsNonnullView(...)`: parameter #1(`view`) is declared non-nullable but the argument `view.findViewById(...)` is nullable: call to View.findViewById(...) at line 26 (nullable according to nullsafe internal models). If you don't expect null, use `androidx.core.view.ViewCompat.requireViewById()` instead.], AlternativeRecommendations, codetoanalyze.java.nullsafe, nullable_methods:android.view.View.findViewById at 26 codetoanalyze/java/nullsafe/AlternativeRecommendations.java, codetoanalyze.java.nullsafe.AlternativeRecommendations.returnValue_ShouldSuggestAlternative(android.view.View):android.view.View, 0, ERADICATE_RETURN_NOT_NULLABLE, no_bucket, WARNING, [`returnValue_ShouldSuggestAlternative(...)`: return type is declared non-nullable but the method returns a nullable value: call to View.findViewById(...) at line 30 (nullable according to nullsafe internal models). If you don't expect null, use `androidx.core.view.ViewCompat.requireViewById()` instead.], AlternativeRecommendations, codetoanalyze.java.nullsafe, nullable_methods:android.view.View.findViewById at 30 codetoanalyze/java/nullsafe/ButterKnife.java, Linters_dummy_method, 15, ERADICATE_META_CLASS_NEEDS_IMPROVEMENT, no_bucket, INFO, [], ButterKnife, codetoanalyze.java.nullsafe, issues: 5, curr_mode: "Default" -codetoanalyze/java/nullsafe/ButterKnife.java, codetoanalyze.java.nullsafe.ButterKnife$TestNotInitialized.(codetoanalyze.java.nullsafe.ButterKnife), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `notInitializedNormalIsBAD` is declared non-nullable, so it should be initialized in the constructor or in an `@Initializer` method], ButterKnife$TestNotInitialized, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.ButterKnife$TestNotInitialized.notInitializedNormalIsBAD +codetoanalyze/java/nullsafe/ButterKnife.java, codetoanalyze.java.nullsafe.ButterKnife$TestNotInitialized.(codetoanalyze.java.nullsafe.ButterKnife), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `notInitializedNormalIsBAD` is declared non-nullable, so it should be initialized in the constructor], ButterKnife$TestNotInitialized, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.ButterKnife$TestNotInitialized.notInitializedNormalIsBAD codetoanalyze/java/nullsafe/ButterKnife.java, codetoanalyze.java.nullsafe.ButterKnife.(), 0, ERADICATE_FIELD_OVER_ANNOTATED, no_bucket, ADVICE, [Field `ButterKnife.nullable` is always initialized in the constructor but is declared `@Nullable`], ButterKnife, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.ButterKnife.nullable codetoanalyze/java/nullsafe/ButterKnife.java, codetoanalyze.java.nullsafe.ButterKnife.assignNullToNormalIsBAD():void, 1, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`normal` is declared non-nullable but is assigned `null`: null constant at line 76.], ButterKnife, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.ButterKnife.normal codetoanalyze/java/nullsafe/ButterKnife.java, codetoanalyze.java.nullsafe.ButterKnife.convertingToNotNullableForNullableIsBAD():java.lang.String, 0, ERADICATE_RETURN_NOT_NULLABLE, no_bucket, WARNING, [`convertingToNotNullableForNullableIsBAD()`: return type is declared non-nullable but the method returns a nullable value: field nullable at line 47.], ButterKnife, codetoanalyze.java.nullsafe @@ -38,41 +38,41 @@ codetoanalyze/java/nullsafe/ConditionRedundant.java, codetoanalyze.java.nullsafe codetoanalyze/java/nullsafe/FieldNotInitialized.java, Linters_dummy_method, 25, ERADICATE_META_CLASS_NEEDS_IMPROVEMENT, no_bucket, INFO, [], FieldNotInitialized, codetoanalyze.java.nullsafe, issues: 32, curr_mode: "Default" codetoanalyze/java/nullsafe/FieldNotInitialized.java, Linters_dummy_method, 236, ERADICATE_META_CLASS_NEEDS_IMPROVEMENT, no_bucket, INFO, [], TestKnownInitializers, codetoanalyze.java.nullsafe, issues: 2, curr_mode: "Default" codetoanalyze/java/nullsafe/FieldNotInitialized.java, Linters_dummy_method, 283, ERADICATE_META_CLASS_NEEDS_IMPROVEMENT, no_bucket, INFO, [], TestInitializerAnnotation, codetoanalyze.java.nullsafe, issues: 5, curr_mode: "Default" -codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$InitCircular.(codetoanalyze.java.nullsafe.FieldNotInitialized), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `stillBad` is declared non-nullable, so it should be initialized in the constructor or in an `@Initializer` method], FieldNotInitialized$InitCircular, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotInitialized$InitCircular.stillBad -codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$InitCircular.(codetoanalyze.java.nullsafe.FieldNotInitialized), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `bad` is declared non-nullable, so it should be initialized in the constructor or in an `@Initializer` method], FieldNotInitialized$InitCircular, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotInitialized$InitCircular.bad -codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$InitIfNull.(codetoanalyze.java.nullsafe.FieldNotInitialized), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `shouldBeGood_FIXME` is declared non-nullable, so it should be initialized in the constructor or in an `@Initializer` method], FieldNotInitialized$InitIfNull, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotInitialized$InitIfNull.shouldBeGood_FIXME +codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$InitCircular.(codetoanalyze.java.nullsafe.FieldNotInitialized), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `stillBad` is declared non-nullable, so it should be initialized in the constructor], FieldNotInitialized$InitCircular, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotInitialized$InitCircular.stillBad +codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$InitCircular.(codetoanalyze.java.nullsafe.FieldNotInitialized), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `bad` is declared non-nullable, so it should be initialized in the constructor], FieldNotInitialized$InitCircular, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotInitialized$InitCircular.bad +codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$InitIfNull.(codetoanalyze.java.nullsafe.FieldNotInitialized), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `shouldBeGood_FIXME` is declared non-nullable, so it should be initialized in the constructor], FieldNotInitialized$InitIfNull, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotInitialized$InitIfNull.shouldBeGood_FIXME codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$InitWithOtherClass$OtherClass.(codetoanalyze.java.nullsafe.FieldNotInitialized$InitWithOtherClass), 0, ERADICATE_FIELD_OVER_ANNOTATED, no_bucket, ADVICE, [Field `FieldNotInitialized$InitWithOtherClass$OtherClass.nullable` is always initialized in the constructor but is declared `@Nullable`], FieldNotInitialized$InitWithOtherClass$OtherClass, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotInitialized$InitWithOtherClass$OtherClass.nullable codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$InitWithOtherClass.(codetoanalyze.java.nullsafe.FieldNotInitialized,codetoanalyze.java.nullsafe.FieldNotInitialized$InitWithOtherClass$OtherClass), 1, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`bad` is declared non-nullable but is assigned a nullable: field nullable at line 185.], FieldNotInitialized$InitWithOtherClass, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotInitialized$InitWithOtherClass.bad -codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$InitWithTheSameClass.(codetoanalyze.java.nullsafe.FieldNotInitialized,codetoanalyze.java.nullsafe.FieldNotInitialized$InitWithTheSameClass), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `bad` is declared non-nullable, so it should be initialized in the constructor or in an `@Initializer` method], FieldNotInitialized$InitWithTheSameClass, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotInitialized$InitWithTheSameClass.bad -codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$InitializationOrder.(codetoanalyze.java.nullsafe.FieldNotInitialized,int), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `o1` is declared non-nullable, so it should be initialized in the constructor or in an `@Initializer` method], FieldNotInitialized$InitializationOrder, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotInitialized$InitializationOrder.o1 -codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$OnlyRead.(codetoanalyze.java.nullsafe.FieldNotInitialized), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `o` is declared non-nullable, so it should be initialized in the constructor or in an `@Initializer` method], FieldNotInitialized$OnlyRead, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotInitialized$OnlyRead.o -codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$OnlyReadIndirect.(codetoanalyze.java.nullsafe.FieldNotInitialized), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `o1` is declared non-nullable, so it should be initialized in the constructor or in an `@Initializer` method], FieldNotInitialized$OnlyReadIndirect, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotInitialized$OnlyReadIndirect.o1 -codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$ShouldInitializeInAllBranches.(codetoanalyze.java.nullsafe.FieldNotInitialized,int), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `f3` is declared non-nullable, so it should be initialized in the constructor or in an `@Initializer` method], FieldNotInitialized$ShouldInitializeInAllBranches, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotInitialized$ShouldInitializeInAllBranches.f3 -codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$ShouldInitializeInAllBranches.(codetoanalyze.java.nullsafe.FieldNotInitialized,int), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `f5` is declared non-nullable, so it should be initialized in the constructor or in an `@Initializer` method], FieldNotInitialized$ShouldInitializeInAllBranches, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotInitialized$ShouldInitializeInAllBranches.f5 -codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$ShouldInitializeInAllBranches.(codetoanalyze.java.nullsafe.FieldNotInitialized,int), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `f2` is declared non-nullable, so it should be initialized in the constructor or in an `@Initializer` method], FieldNotInitialized$ShouldInitializeInAllBranches, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotInitialized$ShouldInitializeInAllBranches.f2 -codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$Suppression.(codetoanalyze.java.nullsafe.FieldNotInitialized), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `suppressWrongLintIsBAD` is declared non-nullable, so it should be initialized in the constructor or in an `@Initializer` method], FieldNotInitialized$Suppression, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotInitialized$Suppression.suppressWrongLintIsBAD -codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$Suppression.(codetoanalyze.java.nullsafe.FieldNotInitialized), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `nonNullIsBAD` is declared non-nullable, so it should be initialized in the constructor or in an `@Initializer` method], FieldNotInitialized$Suppression, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotInitialized$Suppression.nonNullIsBAD -codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$Suppression.(codetoanalyze.java.nullsafe.FieldNotInitialized), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `notNullIsBAD` is declared non-nullable, so it should be initialized in the constructor or in an `@Initializer` method], FieldNotInitialized$Suppression, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotInitialized$Suppression.notNullIsBAD -codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$Suppression.(codetoanalyze.java.nullsafe.FieldNotInitialized), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `nonnullIsBAD` is declared non-nullable, so it should be initialized in the constructor or in an `@Initializer` method], FieldNotInitialized$Suppression, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotInitialized$Suppression.nonnullIsBAD +codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$InitWithTheSameClass.(codetoanalyze.java.nullsafe.FieldNotInitialized,codetoanalyze.java.nullsafe.FieldNotInitialized$InitWithTheSameClass), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `bad` is declared non-nullable, so it should be initialized in the constructor], FieldNotInitialized$InitWithTheSameClass, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotInitialized$InitWithTheSameClass.bad +codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$InitializationOrder.(codetoanalyze.java.nullsafe.FieldNotInitialized,int), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `o1` is declared non-nullable, so it should be initialized in the constructor], FieldNotInitialized$InitializationOrder, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotInitialized$InitializationOrder.o1 +codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$OnlyRead.(codetoanalyze.java.nullsafe.FieldNotInitialized), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `o` is declared non-nullable, so it should be initialized in the constructor], FieldNotInitialized$OnlyRead, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotInitialized$OnlyRead.o +codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$OnlyReadIndirect.(codetoanalyze.java.nullsafe.FieldNotInitialized), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `o1` is declared non-nullable, so it should be initialized in the constructor], FieldNotInitialized$OnlyReadIndirect, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotInitialized$OnlyReadIndirect.o1 +codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$ShouldInitializeInAllBranches.(codetoanalyze.java.nullsafe.FieldNotInitialized,int), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `f3` is declared non-nullable, so it should be initialized in the constructor], FieldNotInitialized$ShouldInitializeInAllBranches, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotInitialized$ShouldInitializeInAllBranches.f3 +codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$ShouldInitializeInAllBranches.(codetoanalyze.java.nullsafe.FieldNotInitialized,int), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `f5` is declared non-nullable, so it should be initialized in the constructor], FieldNotInitialized$ShouldInitializeInAllBranches, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotInitialized$ShouldInitializeInAllBranches.f5 +codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$ShouldInitializeInAllBranches.(codetoanalyze.java.nullsafe.FieldNotInitialized,int), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `f2` is declared non-nullable, so it should be initialized in the constructor], FieldNotInitialized$ShouldInitializeInAllBranches, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotInitialized$ShouldInitializeInAllBranches.f2 +codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$Suppression.(codetoanalyze.java.nullsafe.FieldNotInitialized), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `suppressWrongLintIsBAD` is declared non-nullable, so it should be initialized in the constructor], FieldNotInitialized$Suppression, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotInitialized$Suppression.suppressWrongLintIsBAD +codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$Suppression.(codetoanalyze.java.nullsafe.FieldNotInitialized), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `nonnullIsBAD` is declared non-nullable, so it should be initialized in the constructor], FieldNotInitialized$Suppression, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotInitialized$Suppression.nonnullIsBAD +codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$Suppression.(codetoanalyze.java.nullsafe.FieldNotInitialized), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `notNullIsBAD` is declared non-nullable, so it should be initialized in the constructor], FieldNotInitialized$Suppression, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotInitialized$Suppression.notNullIsBAD +codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$Suppression.(codetoanalyze.java.nullsafe.FieldNotInitialized), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `nonNullIsBAD` is declared non-nullable, so it should be initialized in the constructor], FieldNotInitialized$Suppression, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotInitialized$Suppression.nonNullIsBAD codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$Suppression.testNullifyFields():void, 3, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`nonnullIsBAD` is declared non-nullable but is assigned `null`: null constant at line 62.], FieldNotInitialized$Suppression, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotInitialized$Suppression.nonnullIsBAD codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$Suppression.testNullifyFields():void, 4, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`nonNullIsBAD` is declared non-nullable but is assigned `null`: null constant at line 63.], FieldNotInitialized$Suppression, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotInitialized$Suppression.nonNullIsBAD codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$Suppression.testNullifyFields():void, 5, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`injectIsOK` is declared non-nullable but is assigned `null`: null constant at line 64.], FieldNotInitialized$Suppression, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotInitialized$Suppression.injectIsOK codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$Suppression.testNullifyFields():void, 6, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`suppressAnnotationIsOK` is declared non-nullable but is assigned `null`: null constant at line 65.], FieldNotInitialized$Suppression, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotInitialized$Suppression.suppressAnnotationIsOK codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$Suppression.testNullifyFields():void, 7, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`suppressLintIsOK` is declared non-nullable but is assigned `null`: null constant at line 66.], FieldNotInitialized$Suppression, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotInitialized$Suppression.suppressLintIsOK -codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$Suppressions.(codetoanalyze.java.nullsafe.FieldNotInitialized,int), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `f2` is declared non-nullable, so it should be initialized in the constructor or in an `@Initializer` method], FieldNotInitialized$Suppressions, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotInitialized$Suppressions.f2 +codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$Suppressions.(codetoanalyze.java.nullsafe.FieldNotInitialized,int), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `f2` is declared non-nullable, so it should be initialized in the constructor], FieldNotInitialized$Suppressions, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotInitialized$Suppressions.f2 codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$Suppressions.(codetoanalyze.java.nullsafe.FieldNotInitialized,int), 2, ERADICATE_PARAMETER_NOT_NULLABLE, no_bucket, WARNING, [`FieldNotInitialized$Suppressions.f(...)`: parameter #1(`a`) is declared non-nullable but the argument is `null`.], FieldNotInitialized$Suppressions, codetoanalyze.java.nullsafe codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$Suppressions.(codetoanalyze.java.nullsafe.FieldNotInitialized,int,int), 1, ERADICATE_PARAMETER_NOT_NULLABLE, no_bucket, WARNING, [`FieldNotInitialized$Suppressions.f(...)`: parameter #1(`a`) is declared non-nullable but the argument is `null`.], FieldNotInitialized$Suppressions, codetoanalyze.java.nullsafe codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$Suppressions.(codetoanalyze.java.nullsafe.FieldNotInitialized,int,int,int), 1, ERADICATE_PARAMETER_NOT_NULLABLE, no_bucket, WARNING, [`FieldNotInitialized$Suppressions.f(...)`: parameter #1(`a`) is declared non-nullable but the argument is `null`.], FieldNotInitialized$Suppressions, codetoanalyze.java.nullsafe -codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$WriteItselfIsBAD.(codetoanalyze.java.nullsafe.FieldNotInitialized), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `bad` is declared non-nullable, so it should be initialized in the constructor or in an `@Initializer` method], FieldNotInitialized$WriteItselfIsBAD, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotInitialized$WriteItselfIsBAD.bad -codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.TestInitializerAnnotation$TestFieldNotInitializedDerived.(codetoanalyze.java.nullsafe.TestInitializerAnnotation), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `field2_BAD` is declared non-nullable, so it should be initialized in the constructor or in an `@Initializer` method], TestInitializerAnnotation$TestFieldNotInitializedDerived, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.TestInitializerAnnotation$TestFieldNotInitializedDerived.field2_BAD -codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.TestInitializerAnnotation$TestFieldNotInitializedDerivedDerived.(codetoanalyze.java.nullsafe.TestInitializerAnnotation), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `field2_BAD` is declared non-nullable, so it should be initialized in the constructor or in an `@Initializer` method], TestInitializerAnnotation$TestFieldNotInitializedDerivedDerived, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.TestInitializerAnnotation$TestFieldNotInitializedDerivedDerived.field2_BAD -codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.TestInitializerAnnotation.(), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `dontInitAtAllIsBAD` is declared non-nullable, so it should be initialized in the constructor or in an `@Initializer` method], TestInitializerAnnotation, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.TestInitializerAnnotation.dontInitAtAllIsBAD -codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.TestInitializerAnnotation.(), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `initInAnyOtherMethodIsBAD` is declared non-nullable, so it should be initialized in the constructor or in an `@Initializer` method], TestInitializerAnnotation, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.TestInitializerAnnotation.initInAnyOtherMethodIsBAD +codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.FieldNotInitialized$WriteItselfIsBAD.(codetoanalyze.java.nullsafe.FieldNotInitialized), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `bad` is declared non-nullable, so it should be initialized in the constructor], FieldNotInitialized$WriteItselfIsBAD, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotInitialized$WriteItselfIsBAD.bad +codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.TestInitializerAnnotation$TestFieldNotInitializedDerived.(codetoanalyze.java.nullsafe.TestInitializerAnnotation), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `field2_BAD` is declared non-nullable, so it should be initialized in the constructor], TestInitializerAnnotation$TestFieldNotInitializedDerived, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.TestInitializerAnnotation$TestFieldNotInitializedDerived.field2_BAD +codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.TestInitializerAnnotation$TestFieldNotInitializedDerivedDerived.(codetoanalyze.java.nullsafe.TestInitializerAnnotation), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `field2_BAD` is declared non-nullable, so it should be initialized in the constructor], TestInitializerAnnotation$TestFieldNotInitializedDerivedDerived, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.TestInitializerAnnotation$TestFieldNotInitializedDerivedDerived.field2_BAD +codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.TestInitializerAnnotation.(), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `dontInitAtAllIsBAD` is declared non-nullable, so it should be initialized in the constructor], TestInitializerAnnotation, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.TestInitializerAnnotation.dontInitAtAllIsBAD +codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.TestInitializerAnnotation.(), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `initInAnyOtherMethodIsBAD` is declared non-nullable, so it should be initialized in the constructor], TestInitializerAnnotation, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.TestInitializerAnnotation.initInAnyOtherMethodIsBAD codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.TestInitializerAnnotation.build():java.lang.Object, 5, ERADICATE_CONDITION_REDUNDANT, no_bucket, ADVICE, [The condition TestInitializerAnnotation.initInInitilizerMethod1IsOK might be always true according to the existing annotations.], TestInitializerAnnotation, codetoanalyze.java.nullsafe codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.TestInitializerAnnotation.build():java.lang.Object, 5, ERADICATE_CONDITION_REDUNDANT, no_bucket, ADVICE, [The condition TestInitializerAnnotation.initInInitilizerMethod2IsOK might be always true according to the existing annotations.], TestInitializerAnnotation, codetoanalyze.java.nullsafe codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.TestInitializerAnnotation.set4(java.lang.String):void, 2, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`initByNullableInInitializedMethodIsBAD` is declared non-nullable but is assigned a nullable: method parameter value.], TestInitializerAnnotation, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.TestInitializerAnnotation.initByNullableInInitializedMethodIsBAD -codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.TestKnownInitializers$KnownInitializers.(codetoanalyze.java.nullsafe.TestKnownInitializers), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `initInUnknownMethodIsBAD` is declared non-nullable, so it should be initialized in the constructor or in an `@Initializer` method], TestKnownInitializers$KnownInitializers, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.TestKnownInitializers$KnownInitializers.initInUnknownMethodIsBAD -codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.TestKnownInitializers$SimplyOnCreateWontDoATrick.(codetoanalyze.java.nullsafe.TestKnownInitializers), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `initInUnknownMethodIsBAD` is declared non-nullable, so it should be initialized in the constructor or in an `@Initializer` method], TestKnownInitializers$SimplyOnCreateWontDoATrick, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.TestKnownInitializers$SimplyOnCreateWontDoATrick.initInUnknownMethodIsBAD +codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.TestKnownInitializers$KnownInitializers.(codetoanalyze.java.nullsafe.TestKnownInitializers), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `initInUnknownMethodIsBAD` is declared non-nullable, so it should be initialized in the constructor], TestKnownInitializers$KnownInitializers, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.TestKnownInitializers$KnownInitializers.initInUnknownMethodIsBAD +codetoanalyze/java/nullsafe/FieldNotInitialized.java, codetoanalyze.java.nullsafe.TestKnownInitializers$SimplyOnCreateWontDoATrick.(codetoanalyze.java.nullsafe.TestKnownInitializers), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `initInUnknownMethodIsBAD` is declared non-nullable, so it should be initialized in the constructor], TestKnownInitializers$SimplyOnCreateWontDoATrick, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.TestKnownInitializers$SimplyOnCreateWontDoATrick.initInUnknownMethodIsBAD codetoanalyze/java/nullsafe/FieldNotNullable.java, Linters_dummy_method, 20, ERADICATE_META_CLASS_NEEDS_IMPROVEMENT, no_bucket, INFO, [], CanAssignNullInCleanupMethods, codetoanalyze.java.nullsafe, issues: 1, curr_mode: "Default" codetoanalyze/java/nullsafe/FieldNotNullable.java, Linters_dummy_method, 48, ERADICATE_META_CLASS_NEEDS_IMPROVEMENT, no_bucket, INFO, [], FieldNotNullable, codetoanalyze.java.nullsafe, issues: 5, curr_mode: "Default" codetoanalyze/java/nullsafe/FieldNotNullable.java, Linters_dummy_method, 98, ERADICATE_META_CLASS_NEEDS_IMPROVEMENT, no_bucket, INFO, [], SomeExternalClass, codetoanalyze.java.nullsafe, issues: 1, curr_mode: "Default" @@ -84,7 +84,7 @@ codetoanalyze/java/nullsafe/FieldNotNullable.java, codetoanalyze.java.nullsafe.F codetoanalyze/java/nullsafe/FieldNotNullable.java, codetoanalyze.java.nullsafe.FieldNotNullable.setNullableToNotNullableIsBAD(java.lang.String):void, 1, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`notNullable` is declared non-nullable but is assigned `null`: null constant at line 65.], FieldNotNullable, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotNullable.notNullable codetoanalyze/java/nullsafe/FieldNotNullable.java, codetoanalyze.java.nullsafe.FieldNotNullable.setNullableToNotNullableIsBAD(java.lang.String):void, 2, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`notNullable` is declared non-nullable but is assigned a nullable: method parameter s.], FieldNotNullable, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotNullable.notNullable codetoanalyze/java/nullsafe/FieldNotNullable.java, codetoanalyze.java.nullsafe.FieldNotNullable.setNullableToNotNullableIsBAD(java.lang.String):void, 3, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`notNullable` is declared non-nullable but is assigned a nullable: call to getNullable() at line 67.], FieldNotNullable, codetoanalyze.java.nullsafe, nullable_methods:codetoanalyze.java.nullsafe.FieldNotNullable.getNullable at 67, field:codetoanalyze.java.nullsafe.FieldNotNullable.notNullable -codetoanalyze/java/nullsafe/FieldNotNullable.java, codetoanalyze.java.nullsafe.SomeExternalClass.(), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `externalNotNull` is declared non-nullable, so it should be initialized in the constructor or in an `@Initializer` method], SomeExternalClass, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.SomeExternalClass.externalNotNull +codetoanalyze/java/nullsafe/FieldNotNullable.java, codetoanalyze.java.nullsafe.SomeExternalClass.(), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, WARNING, [Field `externalNotNull` is declared non-nullable, so it should be initialized in the constructor], SomeExternalClass, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.SomeExternalClass.externalNotNull codetoanalyze/java/nullsafe/FieldNullabilityMemoization.java, Linters_dummy_method, 27, ERADICATE_META_CLASS_NEEDS_IMPROVEMENT, no_bucket, INFO, [], FieldNullabilityMemoization, codetoanalyze.java.nullsafe, issues: 2, curr_mode: "Default" codetoanalyze/java/nullsafe/FieldNullabilityMemoization.java, codetoanalyze.java.nullsafe.FieldNullabilityMemoization.dereferenceIsBAD():void, 1, ERADICATE_NULLABLE_DEREFERENCE, no_bucket, WARNING, [`FieldNullabilityMemoization.nullable` is nullable and is not locally checked for null when calling `toString()`.], FieldNullabilityMemoization, codetoanalyze.java.nullsafe codetoanalyze/java/nullsafe/FieldNullabilityMemoization.java, codetoanalyze.java.nullsafe.FieldNullabilityMemoization.dereferenceViaLocalVarIsBAD():void, 2, ERADICATE_NULLABLE_DEREFERENCE, no_bucket, WARNING, [`a` is nullable and is not locally checked for null when calling `toString()`: field nullable at line 35.], FieldNullabilityMemoization, codetoanalyze.java.nullsafe @@ -334,7 +334,7 @@ codetoanalyze/java/nullsafe/StrictMode.java, Linters_dummy_method, 15, ERADICATE codetoanalyze/java/nullsafe/StrictMode.java, Linters_dummy_method, 239, ERADICATE_META_CLASS_IS_NULLSAFE, no_bucket, INFO, [], OtherStrict, codetoanalyze.java.nullsafe, issues: 0, curr_mode: "Strict" codetoanalyze/java/nullsafe/StrictMode.java, Linters_dummy_method, 260, ERADICATE_META_CLASS_CAN_BE_NULLSAFE, no_bucket, ADVICE, [Congrats! `NonStrict` is free of nullability issues. Mark it `@Nullsafe(Nullsafe.Mode.LOCAL)` to prevent regressions.], NonStrict, codetoanalyze.java.nullsafe, issues: 0, curr_mode: "Default", promote_mode: "LocalTrustAll" codetoanalyze/java/nullsafe/StrictMode.java, Linters_dummy_method, 285, ERADICATE_META_CLASS_NEEDS_IMPROVEMENT, no_bucket, INFO, [], SomeEnum, codetoanalyze.java.nullsafe, issues: 0, curr_mode: "Default" -codetoanalyze/java/nullsafe/StrictMode.java, codetoanalyze.java.nullsafe.Strict.(), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, ERROR, [Field `notInitializedIsBAD` is declared non-nullable, so it should be initialized in the constructor or in an `@Initializer` method], Strict, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.Strict.notInitializedIsBAD +codetoanalyze/java/nullsafe/StrictMode.java, codetoanalyze.java.nullsafe.Strict.(), 0, ERADICATE_FIELD_NOT_INITIALIZED, no_bucket, ERROR, [Field `notInitializedIsBAD` is declared non-nullable, so it should be initialized in the constructor], Strict, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.Strict.notInitializedIsBAD codetoanalyze/java/nullsafe/StrictMode.java, codetoanalyze.java.nullsafe.Strict.nonStrictClass_convertingNonnullToNonnullIsBad():java.lang.String, 2, ERADICATE_UNCHECKED_USAGE_IN_NULLSAFE, no_bucket, ERROR, [`NonStrict.getNonnull()`: `@Nullsafe(STRICT)` prohibits using values coming from non-strict classes without a check. Result of this call is used at line 179. Either add a local check for null or assertion, or make `NonStrict` nullsafe strict.], Strict, codetoanalyze.java.nullsafe codetoanalyze/java/nullsafe/StrictMode.java, codetoanalyze.java.nullsafe.Strict.nonStrictClass_convertingNonnullToNullableIsOK():java.lang.String, 0, ERADICATE_RETURN_OVER_ANNOTATED, no_bucket, ADVICE, [Method `nonStrictClass_convertingNonnullToNullableIsOK()` is annotated with `@Nullable` but never returns null.], Strict, codetoanalyze.java.nullsafe codetoanalyze/java/nullsafe/StrictMode.java, codetoanalyze.java.nullsafe.Strict.nonStrictClass_convertingNullableToNonnullIsBad():java.lang.String, 0, ERADICATE_RETURN_NOT_NULLABLE, no_bucket, ERROR, [`nonStrictClass_convertingNullableToNonnullIsBad()`: return type is declared non-nullable but the method returns a nullable value: call to getNullable() at line 137.], Strict, codetoanalyze.java.nullsafe, nullable_methods:codetoanalyze.java.nullsafe.NonStrict.getNullable at 137