diff --git a/infer/src/atd/jsonbug.atd b/infer/src/atd/jsonbug.atd index 77a2053f4..026e1115f 100644 --- a/infer/src/atd/jsonbug.atd +++ b/infer/src/atd/jsonbug.atd @@ -56,9 +56,16 @@ type annotation_point = { dependent_point_ids: string list; (* List of other points that need to be annotated when this one is annotated *) } +type field_name = { + class_name: string; + package_name: string option; + field: string; +} + type nullsafe_extra = { class_name: string; package: string nullable; + ?field: field_name option; (* For field-specific issues (e.g. Field Not Nullable and Field Not Initialized). *) ?nullable_methods: method_info list option; (* If the issue is related to unsafe use of methods being nullable, here's the list of them *) ?unvetted_3rd_party: string list option; (* If the issue is related to the use of a not yet registered third-party methods, here's the list of their signatures *) ?meta_issue_info: nullsafe_meta_issue_info option; (* Should be present if the issue is "nullsafe meta issue" *) diff --git a/infer/src/integration/IssuesTest.ml b/infer/src/integration/IssuesTest.ml index cb62ec84e..77c53d5dd 100644 --- a/infer/src/integration/IssuesTest.ml +++ b/infer/src/integration/IssuesTest.ml @@ -14,14 +14,21 @@ let pp_method_info fmt Jsonbug_t.{class_name; package; method_name; call_line} = let pp_nullsafe_extra fmt Jsonbug_t. - {class_name; package; meta_issue_info; unvetted_3rd_party; nullable_methods; annotation_graph} - = + { class_name + ; package + ; meta_issue_info + ; unvetted_3rd_party + ; nullable_methods + ; annotation_graph + ; field } = F.fprintf fmt "%s, %s" class_name (Option.value package ~default:"") ; Option.iter unvetted_3rd_party ~f:(fun unvetted_3rd_party -> let third_party_str = String.concat unvetted_3rd_party ~sep:"," in F.fprintf fmt ", unvetted_3rd_party:[%s]" third_party_str ) ; Option.iter nullable_methods ~f:(fun nullable_methods -> F.fprintf fmt ", nullable_methods:%a" (Pp.seq pp_method_info) nullable_methods ) ; + Option.iter field ~f:(fun Jsonbug_t.{class_name; package_name; field} -> + F.fprintf fmt ", field:%s.%s.%s" (Option.value package_name ~default:"") class_name field ) ; Option.iter meta_issue_info ~f:(fun Jsonbug_t.{num_issues; curr_nullsafe_mode; can_be_promoted_to} -> let can_be_promoted_to_str = diff --git a/infer/src/nullsafe/AssignmentRule.ml b/infer/src/nullsafe/AssignmentRule.ml index 19abe8449..f9e507cf3 100644 --- a/infer/src/nullsafe/AssignmentRule.ml +++ b/infer/src/nullsafe/AssignmentRule.ml @@ -83,7 +83,8 @@ module ReportableViolation = struct (* A slight adapter over [NullsafeIssue.make]: the same signature but additionally accepts an alternative method *) - let make_issue_with_recommendation ~description ~rhs_origin ~issue_type ~loc ~severity = + let make_issue_with_recommendation ~description ~rhs_origin ~issue_type ~loc ~severity ~field_name + = (* If there is an alternative method to propose, tell about it at the end of the description *) let alternative_method = ErrorRenderingUtils.find_alternative_nonnull_method_description rhs_origin @@ -99,7 +100,7 @@ module ReportableViolation = struct let nullable_methods = match rhs_origin with TypeOrigin.MethodCall origin -> [origin] | _ -> [] in - NullsafeIssue.make ~description:full_description ~issue_type ~loc ~severity + NullsafeIssue.make ~description:full_description ~issue_type ~loc ~severity ~field_name |> NullsafeIssue.with_nullable_methods nullable_methods @@ -189,6 +190,13 @@ module ReportableViolation = struct make_issue_factory ~description ~issue_type + let field_name_of_assignment_type = function + | AssigningToField field_name -> + Some field_name + | PassingParamToFunction _ | ReturningFromFunction _ -> + None + + let mk_nullsafe_issue_for_explicitly_nullable_values ~assignment_type ~rhs_origin ~nullsafe_mode ~explicit_rhs_nullable_kind ~assignment_location = let nullability_evidence = @@ -204,6 +212,7 @@ module ReportableViolation = struct make_issue_with_recommendation ~rhs_origin ~severity:(NullsafeMode.severity nullsafe_mode) ~loc:assignment_location + ~field_name:(field_name_of_assignment_type assignment_type) in match assignment_type with | PassingParamToFunction function_info -> diff --git a/infer/src/nullsafe/ClassLevelAnalysis.ml b/infer/src/nullsafe/ClassLevelAnalysis.ml index f9f65e695..74c9545cc 100644 --- a/infer/src/nullsafe/ClassLevelAnalysis.ml +++ b/infer/src/nullsafe/ClassLevelAnalysis.ml @@ -189,6 +189,7 @@ let report_meta_issue_for_top_level_class tenv source_file class_name class_stru ; meta_issue_info= Some meta_issue_info ; unvetted_3rd_party= None ; nullable_methods= None + ; field= None ; annotation_graph= None } in log_issue ~issue_log ~loc:class_loc ~severity ~nullsafe_extra issue_type description @@ -220,6 +221,7 @@ let analyze_nullsafe_annotations tenv source_file class_name class_struct issue_ ; meta_issue_info= None ; unvetted_3rd_party= None ; nullable_methods= None + ; field= None ; annotation_graph= None } in match NullsafeMode.check_problematic_class_annotation tenv class_name with @@ -267,6 +269,7 @@ let report_annotation_graph source_file class_name class_struct annotation_graph ; meta_issue_info= None ; unvetted_3rd_party= None ; nullable_methods= None + ; field= None ; annotation_graph= Some annotation_graph } in log_issue ~issue_log ~loc:class_loc ~severity:IssueType.Info ~nullsafe_extra diff --git a/infer/src/nullsafe/DereferenceRule.ml b/infer/src/nullsafe/DereferenceRule.ml index 46c0775ba..964e8d0dc 100644 --- a/infer/src/nullsafe/DereferenceRule.ml +++ b/infer/src/nullsafe/DereferenceRule.ml @@ -111,6 +111,7 @@ module ReportableViolation = struct NullsafeIssue.make ~description ~issue_type:IssueType.eradicate_nullable_dereference ~loc:dereference_location ~severity:(NullsafeMode.severity nullsafe_mode) + ~field_name:None |> NullsafeIssue.with_nullable_methods nullable_methods diff --git a/infer/src/nullsafe/ErrorRenderingUtils.ml b/infer/src/nullsafe/ErrorRenderingUtils.ml index 0032fe4fb..affd23fb7 100644 --- a/infer/src/nullsafe/ErrorRenderingUtils.ml +++ b/infer/src/nullsafe/ErrorRenderingUtils.ml @@ -262,6 +262,7 @@ let mk_nullsafe_issue_for_untrusted_values ~nullsafe_mode ~untrusted_kind ~bad_u in NullsafeIssue.make ~description ~issue_type ~loc:object_loc ~severity:(NullsafeMode.severity nullsafe_mode) + ~field_name:None |> NullsafeIssue.with_third_party_dependent_methods third_party_dependent_methods diff --git a/infer/src/nullsafe/InheritanceRule.ml b/infer/src/nullsafe/InheritanceRule.ml index 4eda4fdf6..f946a4812 100644 --- a/infer/src/nullsafe/InheritanceRule.ml +++ b/infer/src/nullsafe/InheritanceRule.ml @@ -89,7 +89,7 @@ module ReportableViolation = struct | InconsistentParam _ -> IssueType.eradicate_inconsistent_subclass_parameter_annotation in - NullsafeIssue.make ~description ~loc ~issue_type ~severity + NullsafeIssue.make ~description ~loc ~issue_type ~severity ~field_name:None end let check type_role ~base ~overridden = diff --git a/infer/src/nullsafe/NullsafeIssue.ml b/infer/src/nullsafe/NullsafeIssue.ml index dd36ab73f..a1a370d0a 100644 --- a/infer/src/nullsafe/NullsafeIssue.ml +++ b/infer/src/nullsafe/NullsafeIssue.ml @@ -11,14 +11,21 @@ type t = { issue_type: IssueType.t ; description: string (** Human-readable description *) ; loc: Location.t (** Where to report the error *) + ; field_name: Fieldname.t option (** If the issue is about a field, here's this field *) ; severity: IssueType.severity ; nullable_methods: TypeOrigin.method_call_origin list (** If the issue is associated with misusing nullable values coming from method calls, here's the list *) ; third_party_dependent_methods: (Procname.Java.t * AnnotatedSignature.t) list } -let make ~issue_type ~description ~loc ~severity = - {issue_type; description; loc; severity; third_party_dependent_methods= []; nullable_methods= []} +let make ~issue_type ~description ~loc ~severity ~field_name = + { issue_type + ; description + ; loc + ; severity + ; third_party_dependent_methods= [] + ; nullable_methods= [] + ; field_name } let with_third_party_dependent_methods methods t = {t with third_party_dependent_methods= methods} @@ -79,7 +86,7 @@ let to_nullable_method_json nullable_methods = ; call_line= call_loc.Location.line } ) -let get_nullsafe_extra {third_party_dependent_methods; nullable_methods} proc_name = +let get_nullsafe_extra {third_party_dependent_methods; nullable_methods; field_name} proc_name = let class_name = Procname.Java.get_simple_class_name proc_name in let package = Procname.Java.get_package proc_name in let unvetted_3rd_party_list = @@ -93,10 +100,21 @@ let get_nullsafe_extra {third_party_dependent_methods; nullable_methods} proc_na let nullable_methods = if List.is_empty nullable_methods then None else Some (to_nullable_method_json nullable_methods) in + let field = + Option.map field_name ~f:(fun field_name -> + let field = Fieldname.get_field_name field_name in + let class_typ_name = Fieldname.get_class_name field_name in + let java_class_name = Typ.Name.Java.get_java_class_name_exn class_typ_name in + Jsonbug_t. + { class_name= JavaClassName.classname java_class_name + ; package_name= JavaClassName.package java_class_name + ; field } ) + in Jsonbug_t. { class_name ; package ; meta_issue_info= None ; unvetted_3rd_party ; nullable_methods + ; field ; annotation_graph= None } diff --git a/infer/src/nullsafe/NullsafeIssue.mli b/infer/src/nullsafe/NullsafeIssue.mli index b7db9ce78..0e1f3af28 100644 --- a/infer/src/nullsafe/NullsafeIssue.mli +++ b/infer/src/nullsafe/NullsafeIssue.mli @@ -11,7 +11,13 @@ open! IStd type t val make : - issue_type:IssueType.t -> description:string -> loc:Location.t -> severity:IssueType.severity -> t + issue_type:IssueType.t + -> description:string + -> loc:Location.t + -> severity:IssueType.severity + -> (* If the issue is about a field (e.g. field not nullable etc.), here's this field *) + field_name:Fieldname.t option + -> t val with_third_party_dependent_methods : (Procname.Java.t * AnnotatedSignature.t) list -> t -> t diff --git a/infer/src/nullsafe/immutableChecker.ml b/infer/src/nullsafe/immutableChecker.ml index eb3cd62d2..325b2c276 100644 --- a/infer/src/nullsafe/immutableChecker.ml +++ b/infer/src/nullsafe/immutableChecker.ml @@ -37,7 +37,7 @@ let check_immutable_cast analysis_data proc_desc typ_expected typ_found_opt loc in let issue_type = IssueType.checkers_immutable_cast in EradicateReporting.report_error analysis_data ImmutableCast - (NullsafeIssue.make ~loc ~description ~severity:Warning ~issue_type) + (NullsafeIssue.make ~loc ~description ~severity:Warning ~issue_type ~field_name:None) | _ -> () ) | None -> diff --git a/infer/src/nullsafe/typeErr.ml b/infer/src/nullsafe/typeErr.ml index 8b45e3771..0819774cd 100644 --- a/infer/src/nullsafe/typeErr.ml +++ b/infer/src/nullsafe/typeErr.ml @@ -265,21 +265,21 @@ let make_nullsafe_issue_if_reportable_lazy ~nullsafe_mode err_instance = this can have a lot of reasons to be actually nullable. Until it is made non-precise, it is recommended to not turn this warning on. But even when it is on, this should not be more than advice. - *) ~severity:IssueType.Advice) ) + *) ~severity:IssueType.Advice ~field_name:None) ) | Over_annotation {over_annotated_violation; loc; violation_type} -> Some ( lazy - (let issue_type = + (let issue_type, field_name = match violation_type with - | OverAnnotatedRule.FieldOverAnnoted _ -> - IssueType.eradicate_field_over_annotated + | OverAnnotatedRule.FieldOverAnnoted field_name -> + (IssueType.eradicate_field_over_annotated, Some field_name) | OverAnnotatedRule.ReturnOverAnnotated _ -> - IssueType.eradicate_return_over_annotated + (IssueType.eradicate_return_over_annotated, None) in let description = OverAnnotatedRule.violation_description over_annotated_violation violation_type in - NullsafeIssue.make ~description ~issue_type ~loc + NullsafeIssue.make ~description ~issue_type ~loc ~field_name ~severity: (* Very non-precise issue. Should be actually turned off unless for experimental purposes. *) IssueType.Advice ) ) @@ -294,7 +294,8 @@ let make_nullsafe_issue_if_reportable_lazy ~nullsafe_mode err_instance = MF.pp_monospaced (Fieldname.get_field_name field_name)) ~issue_type:IssueType.eradicate_field_not_initialized ~loc - ~severity:(NullsafeMode.severity nullsafe_mode)) ) + ~severity:(NullsafeMode.severity nullsafe_mode) + ~field_name:(Some field_name)) ) | Bad_assignment {assignment_location; assignment_type; assignment_violation} -> (* If violation is reportable, create tuple, otherwise None *) let+ reportable_violation = diff --git a/infer/tests/codetoanalyze/java/nullsafe-annotation-graph/issues.exp b/infer/tests/codetoanalyze/java/nullsafe-annotation-graph/issues.exp index 210dedbaa..38ace758c 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 -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 -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 +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.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 diff --git a/infer/tests/codetoanalyze/java/nullsafe/FieldNotNullable.java b/infer/tests/codetoanalyze/java/nullsafe/FieldNotNullable.java index 27ff81e9c..ce5555480 100644 --- a/infer/tests/codetoanalyze/java/nullsafe/FieldNotNullable.java +++ b/infer/tests/codetoanalyze/java/nullsafe/FieldNotNullable.java @@ -78,4 +78,24 @@ public class FieldNotNullable { notNullable = s; // OK notNullable = getNotNullable(); // OK } + + void setNullableToExternalIsBAD(@Nullable String s) { + SomeExternalClass obj = new SomeExternalClass(); + obj.externalNotNull = s; + } + + void setNonNullToExternalIsOK(String s) { + SomeExternalClass obj = new SomeExternalClass(); + obj.externalNotNull = s; + } + + void setNullableToExternalNullableIsOK(@Nullable String s) { + SomeExternalClass obj = new SomeExternalClass(); + obj.externalNullable = s; + } +} + +class SomeExternalClass { + public String externalNotNull; + public @Nullable String externalNullable; } diff --git a/infer/tests/codetoanalyze/java/nullsafe/issues.exp b/infer/tests/codetoanalyze/java/nullsafe/issues.exp index 565469336..c2bc3a03d 100644 --- a/infer/tests/codetoanalyze/java/nullsafe/issues.exp +++ b/infer/tests/codetoanalyze/java/nullsafe/issues.exp @@ -1,19 +1,19 @@ codetoanalyze/java/nullsafe/AlternativeRecommendations.java, Linters_dummy_method, 17, ERADICATE_META_CLASS_NEEDS_IMPROVEMENT, no_bucket, INFO, [], AlternativeRecommendations, codetoanalyze.java.nullsafe, issues: 5, curr_mode: "Default" -codetoanalyze/java/nullsafe/AlternativeRecommendations.java, codetoanalyze.java.nullsafe.AlternativeRecommendations.assigningField_ShouldSuggestAlternative(android.view.View):void, 1, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`field` is declared non-nullable but is assigned a nullable: call to View.findViewById(...) at line 34 (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 34 +codetoanalyze/java/nullsafe/AlternativeRecommendations.java, codetoanalyze.java.nullsafe.AlternativeRecommendations.assigningField_ShouldSuggestAlternative(android.view.View):void, 1, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`field` is declared non-nullable but is assigned a nullable: call to View.findViewById(...) at line 34 (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 34, field:codetoanalyze.java.nullsafe.AlternativeRecommendations.field codetoanalyze/java/nullsafe/AlternativeRecommendations.java, codetoanalyze.java.nullsafe.AlternativeRecommendations.dereference_ShouldSuggestAlternative(android.view.View):void, 1, ERADICATE_NULLABLE_DEREFERENCE, no_bucket, WARNING, [`view.findViewById(...)` is nullable and is not locally checked for null when calling `setId(...)`: call to View.findViewById(...) at line 22 (nullable according to nullsafe internal models). If this is intentional, use `androidx.core.view.ViewCompat.requireViewById()` instead.], AlternativeRecommendations, codetoanalyze.java.nullsafe, nullable_methods:android.view.View.findViewById at 22 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 -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 -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 +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.(), 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 codetoanalyze/java/nullsafe/ButterKnife.java, codetoanalyze.java.nullsafe.ButterKnife.dereferencingNullableIsBAD():void, 1, ERADICATE_NULLABLE_DEREFERENCE, no_bucket, WARNING, [`ButterKnife.nullable` is nullable and is not locally checked for null when calling `length()`.], ButterKnife, codetoanalyze.java.nullsafe codetoanalyze/java/nullsafe/ButterKnife.java, codetoanalyze.java.nullsafe.ButterKnife.passingToNullableForNullableIsBAD():void, 1, ERADICATE_PARAMETER_NOT_NULLABLE, no_bucket, WARNING, [`ButterKnife.f(...)`: parameter #1(`nonNullable`) is declared non-nullable but the argument `ButterKnife.nullable` is nullable.], ButterKnife, codetoanalyze.java.nullsafe codetoanalyze/java/nullsafe/CapturedParam.java, Linters_dummy_method, 13, ERADICATE_META_CLASS_NEEDS_IMPROVEMENT, no_bucket, INFO, [], CapturedParam, codetoanalyze.java.nullsafe, issues: 1, curr_mode: "Default" codetoanalyze/java/nullsafe/CapturedParam.java, codetoanalyze.java.nullsafe.CapturedParam.dereferencingNullableIsBAD(java.lang.Object):void, 1, ERADICATE_NULLABLE_DEREFERENCE, no_bucket, WARNING, [`parameter` is nullable and is not locally checked for null when calling `toString()`.], CapturedParam, codetoanalyze.java.nullsafe codetoanalyze/java/nullsafe/ConditionRedundant.java, Linters_dummy_method, 13, ERADICATE_META_CLASS_CAN_BE_NULLSAFE, no_bucket, ADVICE, [Congrats! `ConditionRedundant` is free of nullability issues. Mark it `@Nullsafe(Nullsafe.Mode.LOCAL)` to prevent regressions.], ConditionRedundant, codetoanalyze.java.nullsafe, issues: 0, curr_mode: "Default", promote_mode: "Strict" -codetoanalyze/java/nullsafe/ConditionRedundant.java, codetoanalyze.java.nullsafe.ConditionRedundant.(), 0, ERADICATE_FIELD_OVER_ANNOTATED, no_bucket, ADVICE, [Field `ConditionRedundant.fieldNullable` is always initialized in the constructor but is declared `@Nullable`], ConditionRedundant, codetoanalyze.java.nullsafe +codetoanalyze/java/nullsafe/ConditionRedundant.java, codetoanalyze.java.nullsafe.ConditionRedundant.(), 0, ERADICATE_FIELD_OVER_ANNOTATED, no_bucket, ADVICE, [Field `ConditionRedundant.fieldNullable` is always initialized in the constructor but is declared `@Nullable`], ConditionRedundant, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.ConditionRedundant.fieldNullable codetoanalyze/java/nullsafe/ConditionRedundant.java, codetoanalyze.java.nullsafe.ConditionRedundant.FP_ternary_NonnullInOneBranch_SecondBranch_ShouldBeOK(java.lang.String,java.lang.String,int):void, 2, ERADICATE_CONDITION_REDUNDANT, no_bucket, ADVICE, [The condition s2 might be always false according to the existing annotations.], ConditionRedundant, codetoanalyze.java.nullsafe codetoanalyze/java/nullsafe/ConditionRedundant.java, codetoanalyze.java.nullsafe.ConditionRedundant.assertNotNull_NonnullIsBAD(java.lang.String):void, 1, ERADICATE_CONDITION_REDUNDANT, no_bucket, ADVICE, [The condition (s!=null) might be always true according to the existing annotations.], ConditionRedundant, codetoanalyze.java.nullsafe codetoanalyze/java/nullsafe/ConditionRedundant.java, codetoanalyze.java.nullsafe.ConditionRedundant.checkArgument_NonnullIsBAd(java.lang.String):void, 1, ERADICATE_CONDITION_REDUNDANT, no_bucket, ADVICE, [The condition s might be always true according to the existing annotations.], ConditionRedundant, codetoanalyze.java.nullsafe @@ -38,60 +38,63 @@ 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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 +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$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$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), 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 -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 -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 -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 -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 +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.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 -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 -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 +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/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: 4, curr_mode: "Default" -codetoanalyze/java/nullsafe/FieldNotNullable.java, codetoanalyze.java.nullsafe.CanAssignNullInCleanupMethods.assignNullInAnyOtherMethodIsBAD():void, 1, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`someObject` is declared non-nullable but is assigned `null`: null constant at line 44.], CanAssignNullInCleanupMethods, codetoanalyze.java.nullsafe -codetoanalyze/java/nullsafe/FieldNotNullable.java, codetoanalyze.java.nullsafe.FieldNotNullable.(), 0, ERADICATE_FIELD_OVER_ANNOTATED, no_bucket, ADVICE, [Field `FieldNotNullable.nullable` is always initialized in the constructor but is declared `@Nullable`], FieldNotNullable, codetoanalyze.java.nullsafe -codetoanalyze/java/nullsafe/FieldNotNullable.java, codetoanalyze.java.nullsafe.FieldNotNullable.(), 4, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`initializeNonNullableWithNullIsBAD` is declared non-nullable but is assigned `null`: null constant at line 52.], FieldNotNullable, codetoanalyze.java.nullsafe +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" +codetoanalyze/java/nullsafe/FieldNotNullable.java, codetoanalyze.java.nullsafe.CanAssignNullInCleanupMethods.assignNullInAnyOtherMethodIsBAD():void, 1, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`someObject` is declared non-nullable but is assigned `null`: null constant at line 44.], CanAssignNullInCleanupMethods, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.CanAssignNullInCleanupMethods.someObject +codetoanalyze/java/nullsafe/FieldNotNullable.java, codetoanalyze.java.nullsafe.FieldNotNullable.(), 0, ERADICATE_FIELD_OVER_ANNOTATED, no_bucket, ADVICE, [Field `FieldNotNullable.nullable` is always initialized in the constructor but is declared `@Nullable`], FieldNotNullable, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotNullable.nullable +codetoanalyze/java/nullsafe/FieldNotNullable.java, codetoanalyze.java.nullsafe.FieldNotNullable.(), 4, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`initializeNonNullableWithNullIsBAD` is declared non-nullable but is assigned `null`: null constant at line 52.], FieldNotNullable, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldNotNullable.initializeNonNullableWithNullIsBAD codetoanalyze/java/nullsafe/FieldNotNullable.java, codetoanalyze.java.nullsafe.FieldNotNullable.getNullable():java.lang.String, 0, ERADICATE_RETURN_OVER_ANNOTATED, no_bucket, ADVICE, [Method `getNullable()` is annotated with `@Nullable` but never returns null.], FieldNotNullable, codetoanalyze.java.nullsafe -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 -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 -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 +codetoanalyze/java/nullsafe/FieldNotNullable.java, codetoanalyze.java.nullsafe.FieldNotNullable.setNullableToExternalIsBAD(java.lang.String):void, 2, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`externalNotNull` is declared non-nullable but is assigned a nullable: method parameter s.], FieldNotNullable, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.SomeExternalClass.externalNotNull +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/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 codetoanalyze/java/nullsafe/FieldOverAnnotated.java, Linters_dummy_method, 15, ERADICATE_META_CLASS_CAN_BE_NULLSAFE, no_bucket, ADVICE, [Congrats! `FieldOverAnnotated` is free of nullability issues. Mark it `@Nullsafe(Nullsafe.Mode.LOCAL)` to prevent regressions.], FieldOverAnnotated, codetoanalyze.java.nullsafe, issues: 0, curr_mode: "Default", promote_mode: "Strict" -codetoanalyze/java/nullsafe/FieldOverAnnotated.java, codetoanalyze.java.nullsafe.FieldOverAnnotated.(int), 0, ERADICATE_FIELD_OVER_ANNOTATED, no_bucket, ADVICE, [Field `FieldOverAnnotated.initializedInAllConstructorsIsBAD` is always initialized in the constructor but is declared `@Nullable`], FieldOverAnnotated, codetoanalyze.java.nullsafe -codetoanalyze/java/nullsafe/FieldOverAnnotated.java, codetoanalyze.java.nullsafe.FieldOverAnnotated.(int), 0, ERADICATE_FIELD_OVER_ANNOTATED, no_bucket, ADVICE, [Field `FieldOverAnnotated.FP_initializedInAllConstructorsButSetToNullInAPublicMethodShouldBeOK` is always initialized in the constructor but is declared `@Nullable`], FieldOverAnnotated, codetoanalyze.java.nullsafe -codetoanalyze/java/nullsafe/FieldOverAnnotated.java, codetoanalyze.java.nullsafe.FieldOverAnnotated.(int), 0, ERADICATE_FIELD_OVER_ANNOTATED, no_bucket, ADVICE, [Field `FieldOverAnnotated.initilizedInAllConstructorsAndAllBranchesIsBAD` is always initialized in the constructor but is declared `@Nullable`], FieldOverAnnotated, codetoanalyze.java.nullsafe -codetoanalyze/java/nullsafe/FieldOverAnnotated.java, codetoanalyze.java.nullsafe.FieldOverAnnotated.(int,int), 0, ERADICATE_FIELD_OVER_ANNOTATED, no_bucket, ADVICE, [Field `FieldOverAnnotated.initializedInAllConstructorsIsBAD` is always initialized in the constructor but is declared `@Nullable`], FieldOverAnnotated, codetoanalyze.java.nullsafe -codetoanalyze/java/nullsafe/FieldOverAnnotated.java, codetoanalyze.java.nullsafe.FieldOverAnnotated.(int,int), 0, ERADICATE_FIELD_OVER_ANNOTATED, no_bucket, ADVICE, [Field `FieldOverAnnotated.FP_initializedInAllConstructorsButSetToNullInAPublicMethodShouldBeOK` is always initialized in the constructor but is declared `@Nullable`], FieldOverAnnotated, codetoanalyze.java.nullsafe -codetoanalyze/java/nullsafe/FieldOverAnnotated.java, codetoanalyze.java.nullsafe.FieldOverAnnotated.(int,int), 0, ERADICATE_FIELD_OVER_ANNOTATED, no_bucket, ADVICE, [Field `FieldOverAnnotated.initilizedInAllConstructorsAndAllBranchesIsBAD` is always initialized in the constructor but is declared `@Nullable`], FieldOverAnnotated, codetoanalyze.java.nullsafe +codetoanalyze/java/nullsafe/FieldOverAnnotated.java, codetoanalyze.java.nullsafe.FieldOverAnnotated.(int), 0, ERADICATE_FIELD_OVER_ANNOTATED, no_bucket, ADVICE, [Field `FieldOverAnnotated.initializedInAllConstructorsIsBAD` is always initialized in the constructor but is declared `@Nullable`], FieldOverAnnotated, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldOverAnnotated.initializedInAllConstructorsIsBAD +codetoanalyze/java/nullsafe/FieldOverAnnotated.java, codetoanalyze.java.nullsafe.FieldOverAnnotated.(int), 0, ERADICATE_FIELD_OVER_ANNOTATED, no_bucket, ADVICE, [Field `FieldOverAnnotated.FP_initializedInAllConstructorsButSetToNullInAPublicMethodShouldBeOK` is always initialized in the constructor but is declared `@Nullable`], FieldOverAnnotated, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldOverAnnotated.FP_initializedInAllConstructorsButSetToNullInAPublicMethodShouldBeOK +codetoanalyze/java/nullsafe/FieldOverAnnotated.java, codetoanalyze.java.nullsafe.FieldOverAnnotated.(int), 0, ERADICATE_FIELD_OVER_ANNOTATED, no_bucket, ADVICE, [Field `FieldOverAnnotated.initilizedInAllConstructorsAndAllBranchesIsBAD` is always initialized in the constructor but is declared `@Nullable`], FieldOverAnnotated, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldOverAnnotated.initilizedInAllConstructorsAndAllBranchesIsBAD +codetoanalyze/java/nullsafe/FieldOverAnnotated.java, codetoanalyze.java.nullsafe.FieldOverAnnotated.(int,int), 0, ERADICATE_FIELD_OVER_ANNOTATED, no_bucket, ADVICE, [Field `FieldOverAnnotated.initializedInAllConstructorsIsBAD` is always initialized in the constructor but is declared `@Nullable`], FieldOverAnnotated, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldOverAnnotated.initializedInAllConstructorsIsBAD +codetoanalyze/java/nullsafe/FieldOverAnnotated.java, codetoanalyze.java.nullsafe.FieldOverAnnotated.(int,int), 0, ERADICATE_FIELD_OVER_ANNOTATED, no_bucket, ADVICE, [Field `FieldOverAnnotated.FP_initializedInAllConstructorsButSetToNullInAPublicMethodShouldBeOK` is always initialized in the constructor but is declared `@Nullable`], FieldOverAnnotated, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldOverAnnotated.FP_initializedInAllConstructorsButSetToNullInAPublicMethodShouldBeOK +codetoanalyze/java/nullsafe/FieldOverAnnotated.java, codetoanalyze.java.nullsafe.FieldOverAnnotated.(int,int), 0, ERADICATE_FIELD_OVER_ANNOTATED, no_bucket, ADVICE, [Field `FieldOverAnnotated.initilizedInAllConstructorsAndAllBranchesIsBAD` is always initialized in the constructor but is declared `@Nullable`], FieldOverAnnotated, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.FieldOverAnnotated.initilizedInAllConstructorsAndAllBranchesIsBAD codetoanalyze/java/nullsafe/InconsistentSubclassAnnotation.java, Linters_dummy_method, 39, ERADICATE_META_CLASS_NEEDS_IMPROVEMENT, no_bucket, INFO, [], ReturnValToNullBAD, codetoanalyze.java.nullsafe, issues: 1, curr_mode: "Default" codetoanalyze/java/nullsafe/InconsistentSubclassAnnotation.java, Linters_dummy_method, 46, ERADICATE_META_CLASS_CAN_BE_NULLSAFE, no_bucket, ADVICE, [Congrats! `ReturnNullToValOK` is free of nullability issues. Mark it `@Nullsafe(Nullsafe.Mode.LOCAL)` to prevent regressions.], ReturnNullToValOK, codetoanalyze.java.nullsafe, issues: 0, curr_mode: "Default", promote_mode: "Strict" codetoanalyze/java/nullsafe/InconsistentSubclassAnnotation.java, Linters_dummy_method, 50, ERADICATE_META_CLASS_CAN_BE_NULLSAFE, no_bucket, ADVICE, [Congrats! `ReturnValFromValAndNullFromNullOK` is free of nullability issues. Mark it `@Nullsafe(Nullsafe.Mode.LOCAL)` to prevent regressions.], ReturnValFromValAndNullFromNullOK, codetoanalyze.java.nullsafe, issues: 0, curr_mode: "Default", promote_mode: "Strict" @@ -138,15 +141,15 @@ codetoanalyze/java/nullsafe/LibraryCalls.java, codetoanalyze.java.nullsafe.Libra codetoanalyze/java/nullsafe/LibraryCalls.java, codetoanalyze.java.nullsafe.LibraryCalls.badSoftReferenceDereference(java.lang.ref.SoftReference):java.lang.String, 1, ERADICATE_NULLABLE_DEREFERENCE, no_bucket, WARNING, [`ref.get()` is nullable and is not locally checked for null when calling `toString()`: call to SoftReference.get() at line 31 (nullable according to nullsafe internal models).], LibraryCalls, codetoanalyze.java.nullsafe, nullable_methods:java.lang.ref.SoftReference.get at 31 codetoanalyze/java/nullsafe/LibraryCalls.java, codetoanalyze.java.nullsafe.LibraryCalls.badWeakReferenceDereference(java.lang.ref.WeakReference):java.lang.String, 1, ERADICATE_NULLABLE_DEREFERENCE, no_bucket, WARNING, [`ref.get()` is nullable and is not locally checked for null when calling `toString()`: call to Reference.get() at line 23 (nullable according to nullsafe internal models).], LibraryCalls, codetoanalyze.java.nullsafe, nullable_methods:java.lang.ref.Reference.get at 23 codetoanalyze/java/nullsafe/MapNullability.java, Linters_dummy_method, 13, ERADICATE_META_CLASS_NEEDS_IMPROVEMENT, no_bucket, INFO, [], MapNullability, codetoanalyze.java.nullsafe, issues: 13, curr_mode: "Default" -codetoanalyze/java/nullsafe/MapNullability.java, codetoanalyze.java.nullsafe.MapNullability$TestThatGetAfterPutIsAllowed.getAfterConditionalPutWrongKeyIsBAD(java.util.Map,java.lang.String,java.lang.String):void, 5, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`dontAssignNull` is declared non-nullable but is assigned a nullable: call to Map.get(...) at line 137 (nullable according to nullsafe internal models).], MapNullability$TestThatGetAfterPutIsAllowed, codetoanalyze.java.nullsafe, nullable_methods:java.util.Map.get at 137 +codetoanalyze/java/nullsafe/MapNullability.java, codetoanalyze.java.nullsafe.MapNullability$TestThatGetAfterPutIsAllowed.getAfterConditionalPutWrongKeyIsBAD(java.util.Map,java.lang.String,java.lang.String):void, 5, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`dontAssignNull` is declared non-nullable but is assigned a nullable: call to Map.get(...) at line 137 (nullable according to nullsafe internal models).], MapNullability$TestThatGetAfterPutIsAllowed, codetoanalyze.java.nullsafe, nullable_methods:java.util.Map.get at 137, field:codetoanalyze.java.nullsafe.MapNullability$TestThatGetAfterPutIsAllowed.dontAssignNull codetoanalyze/java/nullsafe/MapNullability.java, codetoanalyze.java.nullsafe.MapNullability$TestThatGetAfterPutIsAllowed.getAfterPutNullableIsBAD(java.util.Map,java.lang.String):void, 2, ERADICATE_PARAMETER_NOT_NULLABLE, no_bucket, WARNING, [`Map.put(...)`: parameter #2 is declared non-nullable (according to nullsafe internal models) but the argument `nullableValue` is nullable.], MapNullability$TestThatGetAfterPutIsAllowed, codetoanalyze.java.nullsafe -codetoanalyze/java/nullsafe/MapNullability.java, codetoanalyze.java.nullsafe.MapNullability$TestThatGetAfterPutIsAllowed.getAfterPutNullableIsBAD(java.util.Map,java.lang.String):void, 3, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`dontAssignNull` is declared non-nullable but is assigned a nullable: method parameter nullableValue.], MapNullability$TestThatGetAfterPutIsAllowed, codetoanalyze.java.nullsafe -codetoanalyze/java/nullsafe/MapNullability.java, codetoanalyze.java.nullsafe.MapNullability$TestThatGetAfterPutIsAllowed.getAfterPutSeveralKeysButGetWrongOneIsBAD(java.util.Map):void, 4, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`dontAssignNull` is declared non-nullable but is assigned a nullable: call to Map.get(...) at line 98 (nullable according to nullsafe internal models).], MapNullability$TestThatGetAfterPutIsAllowed, codetoanalyze.java.nullsafe, nullable_methods:java.util.Map.get at 98 -codetoanalyze/java/nullsafe/MapNullability.java, codetoanalyze.java.nullsafe.MapNullability$TestThatGetAfterPutIsAllowed.getAfterPutWrongKeyIsBAD(java.util.Map,java.lang.String,java.lang.String):void, 3, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`dontAssignNull` is declared non-nullable but is assigned a nullable: call to Map.get(...) at line 79 (nullable according to nullsafe internal models).], MapNullability$TestThatGetAfterPutIsAllowed, codetoanalyze.java.nullsafe, nullable_methods:java.util.Map.get at 79 -codetoanalyze/java/nullsafe/MapNullability.java, codetoanalyze.java.nullsafe.MapNullability$TestThatGetAfterPutIsAllowed.getWithoutPutIsBAD(java.util.Map,java.lang.String):void, 1, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`dontAssignNull` is declared non-nullable but is assigned a nullable: call to Map.get(...) at line 73 (nullable according to nullsafe internal models).], MapNullability$TestThatGetAfterPutIsAllowed, codetoanalyze.java.nullsafe, nullable_methods:java.util.Map.get at 73 +codetoanalyze/java/nullsafe/MapNullability.java, codetoanalyze.java.nullsafe.MapNullability$TestThatGetAfterPutIsAllowed.getAfterPutNullableIsBAD(java.util.Map,java.lang.String):void, 3, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`dontAssignNull` is declared non-nullable but is assigned a nullable: method parameter nullableValue.], MapNullability$TestThatGetAfterPutIsAllowed, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.MapNullability$TestThatGetAfterPutIsAllowed.dontAssignNull +codetoanalyze/java/nullsafe/MapNullability.java, codetoanalyze.java.nullsafe.MapNullability$TestThatGetAfterPutIsAllowed.getAfterPutSeveralKeysButGetWrongOneIsBAD(java.util.Map):void, 4, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`dontAssignNull` is declared non-nullable but is assigned a nullable: call to Map.get(...) at line 98 (nullable according to nullsafe internal models).], MapNullability$TestThatGetAfterPutIsAllowed, codetoanalyze.java.nullsafe, nullable_methods:java.util.Map.get at 98, field:codetoanalyze.java.nullsafe.MapNullability$TestThatGetAfterPutIsAllowed.dontAssignNull +codetoanalyze/java/nullsafe/MapNullability.java, codetoanalyze.java.nullsafe.MapNullability$TestThatGetAfterPutIsAllowed.getAfterPutWrongKeyIsBAD(java.util.Map,java.lang.String,java.lang.String):void, 3, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`dontAssignNull` is declared non-nullable but is assigned a nullable: call to Map.get(...) at line 79 (nullable according to nullsafe internal models).], MapNullability$TestThatGetAfterPutIsAllowed, codetoanalyze.java.nullsafe, nullable_methods:java.util.Map.get at 79, field:codetoanalyze.java.nullsafe.MapNullability$TestThatGetAfterPutIsAllowed.dontAssignNull +codetoanalyze/java/nullsafe/MapNullability.java, codetoanalyze.java.nullsafe.MapNullability$TestThatGetAfterPutIsAllowed.getWithoutPutIsBAD(java.util.Map,java.lang.String):void, 1, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`dontAssignNull` is declared non-nullable but is assigned a nullable: call to Map.get(...) at line 73 (nullable according to nullsafe internal models).], MapNullability$TestThatGetAfterPutIsAllowed, codetoanalyze.java.nullsafe, nullable_methods:java.util.Map.get at 73, field:codetoanalyze.java.nullsafe.MapNullability$TestThatGetAfterPutIsAllowed.dontAssignNull codetoanalyze/java/nullsafe/MapNullability.java, codetoanalyze.java.nullsafe.MapNullability$TestThatGetAfterPutIsAllowed.overwriteKeyByNonnullIsOK(java.util.Map,java.lang.String):void, 1, ERADICATE_PARAMETER_NOT_NULLABLE, no_bucket, WARNING, [`Map.put(...)`: parameter #2 is declared non-nullable (according to nullsafe internal models) but the argument is `null`.], MapNullability$TestThatGetAfterPutIsAllowed, codetoanalyze.java.nullsafe codetoanalyze/java/nullsafe/MapNullability.java, codetoanalyze.java.nullsafe.MapNullability$TestThatGetAfterPutIsAllowed.overwriteKeyByNullIsBAD(java.util.Map,java.lang.String):void, 2, ERADICATE_PARAMETER_NOT_NULLABLE, no_bucket, WARNING, [`Map.put(...)`: parameter #2 is declared non-nullable (according to nullsafe internal models) but the argument is `null`.], MapNullability$TestThatGetAfterPutIsAllowed, codetoanalyze.java.nullsafe -codetoanalyze/java/nullsafe/MapNullability.java, codetoanalyze.java.nullsafe.MapNullability$TestThatGetAfterPutIsAllowed.overwriteKeyByNullIsBAD(java.util.Map,java.lang.String):void, 3, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`dontAssignNull` is declared non-nullable but is assigned `null`: null constant at line 114.], MapNullability$TestThatGetAfterPutIsAllowed, codetoanalyze.java.nullsafe +codetoanalyze/java/nullsafe/MapNullability.java, codetoanalyze.java.nullsafe.MapNullability$TestThatGetAfterPutIsAllowed.overwriteKeyByNullIsBAD(java.util.Map,java.lang.String):void, 3, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`dontAssignNull` is declared non-nullable but is assigned `null`: null constant at line 114.], MapNullability$TestThatGetAfterPutIsAllowed, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.MapNullability$TestThatGetAfterPutIsAllowed.dontAssignNull codetoanalyze/java/nullsafe/MapNullability.java, codetoanalyze.java.nullsafe.MapNullability$TestThatGetIsAllowedOnlyAfterContainsKeyWasChecked.immutableMap_usingGetAfterWrongKeyWasCheckedIsBAD(com.google.common.collect.ImmutableMap):void, 3, ERADICATE_NULLABLE_DEREFERENCE, no_bucket, WARNING, [`m.get(...)` is nullable and is not locally checked for null when calling `isEmpty()`: call to ImmutableMap.get(...) at line 59 (nullable according to nullsafe internal models).], MapNullability$TestThatGetIsAllowedOnlyAfterContainsKeyWasChecked, codetoanalyze.java.nullsafe, nullable_methods:com.google.common.collect.ImmutableMap.get at 59 codetoanalyze/java/nullsafe/MapNullability.java, codetoanalyze.java.nullsafe.MapNullability$TestThatGetIsAllowedOnlyAfterContainsKeyWasChecked.usingGetAfterWrongKeyWasCheckedInWhileLoopIsBAD(java.util.Map):void, 3, ERADICATE_NULLABLE_DEREFERENCE, no_bucket, WARNING, [`m.get(...)` is nullable and is not locally checked for null when calling `isEmpty()`: call to Map.get(...) at line 44 (nullable according to nullsafe internal models).], MapNullability$TestThatGetIsAllowedOnlyAfterContainsKeyWasChecked, codetoanalyze.java.nullsafe, nullable_methods:java.util.Map.get at 44 codetoanalyze/java/nullsafe/MapNullability.java, codetoanalyze.java.nullsafe.MapNullability$TestThatGetIsAllowedOnlyAfterContainsKeyWasChecked.usingGetAfterWrongKeyWasCheckedIsBAD(java.util.Map):void, 2, ERADICATE_NULLABLE_DEREFERENCE, no_bucket, WARNING, [`m.get(...)` is nullable and is not locally checked for null when calling `isEmpty()`: call to Map.get(...) at line 29 (nullable according to nullsafe internal models).], MapNullability$TestThatGetIsAllowedOnlyAfterContainsKeyWasChecked, codetoanalyze.java.nullsafe, nullable_methods:java.util.Map.get at 29 @@ -165,14 +168,14 @@ codetoanalyze/java/nullsafe/ModePromotions.java, Linters_dummy_method, 105, ERAD codetoanalyze/java/nullsafe/ModePromotions.java, Linters_dummy_method, 112, ERADICATE_META_CLASS_IS_NULLSAFE, no_bucket, INFO, [], TrustNone_CanBePromotedToStrict, codetoanalyze.java.nullsafe, issues: 0, curr_mode: "LocalTrustNone", promote_mode: "Strict" codetoanalyze/java/nullsafe/MyPreconditions.java, Linters_dummy_method, 11, ERADICATE_META_CLASS_CAN_BE_NULLSAFE, no_bucket, ADVICE, [Congrats! `MyPreconditions` is free of nullability issues. Mark it `@Nullsafe(Nullsafe.Mode.LOCAL)` to prevent regressions.], MyPreconditions, codetoanalyze.java.nullsafe, issues: 0, curr_mode: "Default", promote_mode: "Strict" codetoanalyze/java/nullsafe/NestedFieldAccess.java, Linters_dummy_method, 12, ERADICATE_META_CLASS_NEEDS_IMPROVEMENT, no_bucket, INFO, [], NestedFieldAccess, codetoanalyze.java.nullsafe, issues: 15, curr_mode: "Default" -codetoanalyze/java/nullsafe/NestedFieldAccess.java, codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent.chainOf0VsChainOf0ParamsMismatchIsBad():void, 2, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`dontAssignNull` is declared non-nullable but is assigned a nullable: call to nullable(...) at line 145.], NestedFieldAccess$TestFunctionsIdempotent, codetoanalyze.java.nullsafe, nullable_methods:codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent.nullable at 145 -codetoanalyze/java/nullsafe/NestedFieldAccess.java, codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent.chainOf0VsChainOf1IsBad():void, 2, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`dontAssignNull` is declared non-nullable but is assigned a nullable: call to nullable(...) at line 169.], NestedFieldAccess$TestFunctionsIdempotent, codetoanalyze.java.nullsafe, nullable_methods:codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent.nullable at 169 -codetoanalyze/java/nullsafe/NestedFieldAccess.java, codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent.chainOf1VsChainOf0IsBad():void, 2, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`dontAssignNull` is declared non-nullable but is assigned a nullable: call to nullable(...) at line 175.], NestedFieldAccess$TestFunctionsIdempotent, codetoanalyze.java.nullsafe, nullable_methods:codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent.nullable at 175 -codetoanalyze/java/nullsafe/NestedFieldAccess.java, codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent.chainOf1VsChainOf1ParamMismatchIsBad():void, 2, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`dontAssignNull` is declared non-nullable but is assigned a nullable: call to nullable(...) at line 187.], NestedFieldAccess$TestFunctionsIdempotent, codetoanalyze.java.nullsafe, nullable_methods:codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent.nullable at 187 -codetoanalyze/java/nullsafe/NestedFieldAccess.java, codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent.chainOf1VsChainOf2IsBad():void, 2, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`dontAssignNull` is declared non-nullable but is assigned a nullable: call to nullable(...) at line 199.], NestedFieldAccess$TestFunctionsIdempotent, codetoanalyze.java.nullsafe, nullable_methods:codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent.nullable at 199 -codetoanalyze/java/nullsafe/NestedFieldAccess.java, codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent.chainOf2VsChainOf1IsBad():void, 2, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`dontAssignNull` is declared non-nullable but is assigned a nullable: call to nullable(...) at line 205.], NestedFieldAccess$TestFunctionsIdempotent, codetoanalyze.java.nullsafe, nullable_methods:codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent.nullable at 205 -codetoanalyze/java/nullsafe/NestedFieldAccess.java, codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent.otherObjVsItselfIsOKParamsMismatchIsBAD(codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent):void, 2, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`dontAssignNull` is declared non-nullable but is assigned a nullable: call to nullable(...) at line 157.], NestedFieldAccess$TestFunctionsIdempotent, codetoanalyze.java.nullsafe, nullable_methods:codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent.nullable at 157 -codetoanalyze/java/nullsafe/NestedFieldAccess.java, codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent.selfVsOtherObjectIsBAD(codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent):void, 2, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`dontAssignNull` is declared non-nullable but is assigned a nullable: call to nullable(...) at line 163.], NestedFieldAccess$TestFunctionsIdempotent, codetoanalyze.java.nullsafe, nullable_methods:codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent.nullable at 163 +codetoanalyze/java/nullsafe/NestedFieldAccess.java, codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent.chainOf0VsChainOf0ParamsMismatchIsBad():void, 2, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`dontAssignNull` is declared non-nullable but is assigned a nullable: call to nullable(...) at line 145.], NestedFieldAccess$TestFunctionsIdempotent, codetoanalyze.java.nullsafe, nullable_methods:codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent.nullable at 145, field:codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent.dontAssignNull +codetoanalyze/java/nullsafe/NestedFieldAccess.java, codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent.chainOf0VsChainOf1IsBad():void, 2, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`dontAssignNull` is declared non-nullable but is assigned a nullable: call to nullable(...) at line 169.], NestedFieldAccess$TestFunctionsIdempotent, codetoanalyze.java.nullsafe, nullable_methods:codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent.nullable at 169, field:codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent.dontAssignNull +codetoanalyze/java/nullsafe/NestedFieldAccess.java, codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent.chainOf1VsChainOf0IsBad():void, 2, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`dontAssignNull` is declared non-nullable but is assigned a nullable: call to nullable(...) at line 175.], NestedFieldAccess$TestFunctionsIdempotent, codetoanalyze.java.nullsafe, nullable_methods:codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent.nullable at 175, field:codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent.dontAssignNull +codetoanalyze/java/nullsafe/NestedFieldAccess.java, codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent.chainOf1VsChainOf1ParamMismatchIsBad():void, 2, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`dontAssignNull` is declared non-nullable but is assigned a nullable: call to nullable(...) at line 187.], NestedFieldAccess$TestFunctionsIdempotent, codetoanalyze.java.nullsafe, nullable_methods:codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent.nullable at 187, field:codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent.dontAssignNull +codetoanalyze/java/nullsafe/NestedFieldAccess.java, codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent.chainOf1VsChainOf2IsBad():void, 2, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`dontAssignNull` is declared non-nullable but is assigned a nullable: call to nullable(...) at line 199.], NestedFieldAccess$TestFunctionsIdempotent, codetoanalyze.java.nullsafe, nullable_methods:codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent.nullable at 199, field:codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent.dontAssignNull +codetoanalyze/java/nullsafe/NestedFieldAccess.java, codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent.chainOf2VsChainOf1IsBad():void, 2, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`dontAssignNull` is declared non-nullable but is assigned a nullable: call to nullable(...) at line 205.], NestedFieldAccess$TestFunctionsIdempotent, codetoanalyze.java.nullsafe, nullable_methods:codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent.nullable at 205, field:codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent.dontAssignNull +codetoanalyze/java/nullsafe/NestedFieldAccess.java, codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent.otherObjVsItselfIsOKParamsMismatchIsBAD(codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent):void, 2, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`dontAssignNull` is declared non-nullable but is assigned a nullable: call to nullable(...) at line 157.], NestedFieldAccess$TestFunctionsIdempotent, codetoanalyze.java.nullsafe, nullable_methods:codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent.nullable at 157, field:codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent.dontAssignNull +codetoanalyze/java/nullsafe/NestedFieldAccess.java, codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent.selfVsOtherObjectIsBAD(codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent):void, 2, ERADICATE_FIELD_NOT_NULLABLE, no_bucket, WARNING, [`dontAssignNull` is declared non-nullable but is assigned a nullable: call to nullable(...) at line 163.], NestedFieldAccess$TestFunctionsIdempotent, codetoanalyze.java.nullsafe, nullable_methods:codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent.nullable at 163, field:codetoanalyze.java.nullsafe.NestedFieldAccess$TestFunctionsIdempotent.dontAssignNull codetoanalyze/java/nullsafe/NestedFieldAccess.java, codetoanalyze.java.nullsafe.NestedFieldAccess$TestNullableChains.deep_AccessWithoutNullCheckIsBad(codetoanalyze.java.nullsafe.NestedFieldAccess$CC):void, 2, ERADICATE_NULLABLE_DEREFERENCE, no_bucket, WARNING, [`cc.c.s` is nullable and is not locally checked for null when calling `length()`.], NestedFieldAccess$TestNullableChains, codetoanalyze.java.nullsafe codetoanalyze/java/nullsafe/NestedFieldAccess.java, codetoanalyze.java.nullsafe.NestedFieldAccess$TestNullableChains.field_AccessWithoutNullCheckIsBad():void, 1, ERADICATE_NULLABLE_DEREFERENCE, no_bucket, WARNING, [`NestedFieldAccess$TestNullableChains.s` is nullable and is not locally checked for null when calling `length()`.], NestedFieldAccess$TestNullableChains, codetoanalyze.java.nullsafe codetoanalyze/java/nullsafe/NestedFieldAccess.java, codetoanalyze.java.nullsafe.NestedFieldAccess$TestNullableChains.local_AccessWithoutNullCheckIsBad():void, 2, ERADICATE_NULLABLE_DEREFERENCE, no_bucket, WARNING, [`c.s` is nullable and is not locally checked for null when calling `length()`.], NestedFieldAccess$TestNullableChains, codetoanalyze.java.nullsafe @@ -182,8 +185,8 @@ codetoanalyze/java/nullsafe/NestedFieldAccess.java, codetoanalyze.java.nullsafe. codetoanalyze/java/nullsafe/NestedFieldAccess.java, codetoanalyze.java.nullsafe.NestedFieldAccess$TestNullableChains.veryDeep_IncompleteAccessViaOrEarlyReturnIsBad(codetoanalyze.java.nullsafe.NestedFieldAccess$CCC):void, 3, ERADICATE_NULLABLE_DEREFERENCE, no_bucket, WARNING, [`ccc.cc.c.s` is nullable and is not locally checked for null when calling `length()`.], NestedFieldAccess$TestNullableChains, codetoanalyze.java.nullsafe codetoanalyze/java/nullsafe/NoReuseUndefFunctionValues.java, Linters_dummy_method, 12, ERADICATE_META_CLASS_CAN_BE_NULLSAFE, no_bucket, ADVICE, [Congrats! `NoReuseUndefFunctionValues` is free of nullability issues. Mark it `@Nullsafe(Nullsafe.Mode.LOCAL)` to prevent regressions.], NoReuseUndefFunctionValues, codetoanalyze.java.nullsafe, issues: 0, curr_mode: "Default", promote_mode: "Strict" codetoanalyze/java/nullsafe/NullFieldAccess.java, Linters_dummy_method, 12, ERADICATE_META_CLASS_NEEDS_IMPROVEMENT, no_bucket, INFO, [], NullFieldAccess, codetoanalyze.java.nullsafe, issues: 5, curr_mode: "Default" -codetoanalyze/java/nullsafe/NullFieldAccess.java, codetoanalyze.java.nullsafe.NullFieldAccess.(), 0, ERADICATE_FIELD_OVER_ANNOTATED, no_bucket, ADVICE, [Field `NullFieldAccess.nullableArray` is always initialized in the constructor but is declared `@Nullable`], NullFieldAccess, codetoanalyze.java.nullsafe -codetoanalyze/java/nullsafe/NullFieldAccess.java, codetoanalyze.java.nullsafe.NullFieldAccess.(), 0, ERADICATE_FIELD_OVER_ANNOTATED, no_bucket, ADVICE, [Field `NullFieldAccess.nullable` is always initialized in the constructor but is declared `@Nullable`], NullFieldAccess, codetoanalyze.java.nullsafe +codetoanalyze/java/nullsafe/NullFieldAccess.java, codetoanalyze.java.nullsafe.NullFieldAccess.(), 0, ERADICATE_FIELD_OVER_ANNOTATED, no_bucket, ADVICE, [Field `NullFieldAccess.nullableArray` is always initialized in the constructor but is declared `@Nullable`], NullFieldAccess, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.NullFieldAccess.nullableArray +codetoanalyze/java/nullsafe/NullFieldAccess.java, codetoanalyze.java.nullsafe.NullFieldAccess.(), 0, ERADICATE_FIELD_OVER_ANNOTATED, no_bucket, ADVICE, [Field `NullFieldAccess.nullable` is always initialized in the constructor but is declared `@Nullable`], NullFieldAccess, codetoanalyze.java.nullsafe, field:codetoanalyze.java.nullsafe.NullFieldAccess.nullable codetoanalyze/java/nullsafe/NullFieldAccess.java, codetoanalyze.java.nullsafe.NullFieldAccess.testArray():void, 1, ERADICATE_NULLABLE_DEREFERENCE, no_bucket, WARNING, [Array `NullFieldAccess.nullableArray` is nullable and is not locally checked for null when accessing its length.], NullFieldAccess, codetoanalyze.java.nullsafe codetoanalyze/java/nullsafe/NullFieldAccess.java, codetoanalyze.java.nullsafe.NullFieldAccess.testArray():void, 2, ERADICATE_NULLABLE_DEREFERENCE, no_bucket, WARNING, [Array `NullFieldAccess.nullableArray` is nullable and is not locally checked for null when accessing at index `0`.], NullFieldAccess, codetoanalyze.java.nullsafe codetoanalyze/java/nullsafe/NullFieldAccess.java, codetoanalyze.java.nullsafe.NullFieldAccess.testInterface():void, 2, ERADICATE_NULLABLE_DEREFERENCE, no_bucket, WARNING, [`bad` is nullable and is not locally checked for null when calling `toString()`: field nullable at line 52.], NullFieldAccess, codetoanalyze.java.nullsafe @@ -331,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 +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.nonStrictClass_convertingNonnullToNonnullIsBad():java.lang.String, 2, ERADICATE_UNCHECKED_USAGE_IN_NULLSAFE, no_bucket, ERROR, [`NonStrict.getNonnull()`: `@NullsafeStrict` mode 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