Module Nullsafe.EradicateChecks
module L = IBase.Logging
val explain_expr : IR.Tenv.t -> IR.Procdesc.Node.t -> IR.Exp.t -> string option
val is_virtual : AnnotatedSignature.param_signature list -> bool
val check_object_dereference : Absint.IntraproceduralAnalysis.t -> nullsafe_mode:NullsafeMode.t -> (IR.Procdesc.Node.t -> IR.Procdesc.Node.t) -> IR.Procdesc.Node.t -> TypeErr.InstrRef.t -> IR.Exp.t -> DereferenceRule.ReportableViolation.dereference_type -> InferredNullability.t -> IBase.Location.t -> unit
val check_condition_for_redundancy : Absint.IntraproceduralAnalysis.t -> is_always_true:bool -> (IR.Procdesc.Node.t -> IR.Procdesc.Node.t) -> IR.Procdesc.Node.t -> nullsafe_mode:NullsafeMode.t -> IR.Exp.t -> IR.Typ.t -> InferredNullability.t -> IDEnv.t -> IBase.LineReader.t -> IBase.Location.t -> TypeErr.InstrRef.t -> unit
expr
is an expression that was explicitly compared with `null`. At the same time,expr
hadinferred_nullability
before the comparision. Check if the comparision is redundant and emit an issue, if this is the case.
val check_field_assignment : Absint.IntraproceduralAnalysis.t -> nullsafe_mode:NullsafeMode.t -> (IR.Procdesc.Node.t -> IR.Procdesc.Node.t) -> 'a -> TypeErr.InstrRef.t -> 'b -> expr_rhs:'c -> field_type:IR.Typ.t -> IBase.Location.t -> IR.Fieldname.t -> AnnotatedField.t -> ('a -> TypeErr.InstrRef.t -> 'b -> 'c -> (IR.Typ.t * InferredNullability.t) -> IBase.Location.t -> 'd * InferredNullability.t) -> unit
Check an assignment to a field.
val is_field_declared_as_nonnull : AnnotatedField.t option -> bool
val lookup_field_in_typestate : IR.Procname.t -> IR.Fieldname.t -> TypeState.t -> TypeState.range option
val convert_predicate : (TypeState.range -> bool) -> IR.Fieldname.t -> (IR.Procname.t * TypeState.t) -> bool
val predicate_holds_for_some_typestate : (IR.Procname.t * TypeState.t) list -> IR.Fieldname.t -> predicate:(TypeState.range -> bool) -> bool
val get_nullability_upper_bound_for_typestate : IR.Procname.t -> IR.Fieldname.t -> TypeState.t -> Nullability.t
val get_nullability_upper_bound : IR.Fieldname.t -> (IR.Procname.t * TypeState.t) list -> Nullability.t
val is_generated_field : IR.Fieldname.t -> bool
val check_constructor_initialization : Absint.IntraproceduralAnalysis.t -> (IR.Procdesc.Node.t -> IR.Procdesc.Node.t) -> IR.Procdesc.Node.t -> nullsafe_mode:NullsafeMode.t -> typestates_for_curr_constructor_and_all_initializer_methods:(IR.Procname.t * TypeState.t) list IStdlib.IStd.Lazy.t -> typestates_for_all_constructors_incl_current:(IR.Procname.t * TypeState.t) list IStdlib.IStd.Lazy.t -> IBase.Location.t -> unit
Check field initialization for a given constructor
val check_return_not_nullable : Absint.IntraproceduralAnalysis.t -> nullsafe_mode:NullsafeMode.t -> (IR.Procdesc.Node.t -> IR.Procdesc.Node.t) -> IBase.Location.t -> AnnotatedSignature.ret_signature -> InferredNullability.t -> unit
val check_return_overrannotated : Absint.IntraproceduralAnalysis.t -> (IR.Procdesc.Node.t -> IR.Procdesc.Node.t) -> IBase.Location.t -> nullsafe_mode:NullsafeMode.t -> AnnotatedSignature.ret_signature -> InferredNullability.t -> unit
val check_return_annotation : Absint.IntraproceduralAnalysis.t -> (IR.Procdesc.Node.t -> IR.Procdesc.Node.t) -> ('a * InferredNullability.t) option -> AnnotatedSignature.t -> bool -> IBase.Location.t -> unit
Check the annotations when returning from a method.
val check_call_receiver : Absint.IntraproceduralAnalysis.t -> nullsafe_mode:NullsafeMode.t -> (IR.Procdesc.Node.t -> IR.Procdesc.Node.t) -> IR.Procdesc.Node.t -> 'a -> ((IR.Exp.t * 'b) * 'c) list -> IR.Procname.t -> TypeErr.InstrRef.t -> IBase.Location.t -> (IR.Procdesc.Node.t -> TypeErr.InstrRef.t -> 'a -> 'b -> ('c * InferredNullability.t) -> IBase.Location.t -> 'd * InferredNullability.t) -> unit
Check the receiver of a virtual call.
type resolved_param
=
{
num : int;
formal : AnnotatedSignature.param_signature;
actual : IR.Exp.t * InferredNullability.t;
is_formal_propagates_nullable : bool;
}
val check_call_parameters : Absint.IntraproceduralAnalysis.t -> nullsafe_mode:NullsafeMode.t -> callee_annotated_signature:AnnotatedSignature.t -> (IR.Procdesc.Node.t -> IR.Procdesc.Node.t) -> IR.Procdesc.Node.t -> IR.ProcAttributes.t -> resolved_param list -> IBase.Location.t -> TypeErr.InstrRef.t -> unit
Check the parameters of a call.
val check_inheritance_rule_for_return : Absint.IntraproceduralAnalysis.t -> (IR.Procdesc.Node.t -> IR.Procdesc.Node.t) -> IBase.Location.t -> nullsafe_mode:NullsafeMode.t -> base_proc_name:IR.Procname.t -> base_nullability:Nullability.t -> overridden_nullability:Nullability.t -> unit
val check_inheritance_rule_for_param : Absint.IntraproceduralAnalysis.t -> (IR.Procdesc.Node.t -> IR.Procdesc.Node.t) -> IBase.Location.t -> nullsafe_mode:NullsafeMode.t -> overridden_param_name:IR.Mangled.t -> base_proc_name:IR.Procname.t -> param_position:int -> base_nullability:Nullability.t -> overridden_nullability:Nullability.t -> unit
val check_inheritance_rule_for_params : Absint.IntraproceduralAnalysis.t -> (IR.Procdesc.Node.t -> IR.Procdesc.Node.t) -> IBase.Location.t -> nullsafe_mode:NullsafeMode.t -> base_proc_name:IR.Procname.t -> base_signature:AnnotatedSignature.t -> overridden_signature:AnnotatedSignature.t -> unit
val check_inheritance_rule_for_signature : Absint.IntraproceduralAnalysis.t -> (IR.Procdesc.Node.t -> IR.Procdesc.Node.t) -> IBase.Location.t -> nullsafe_mode:NullsafeMode.t -> base_proc_name:IR.Procname.t -> base_signature:AnnotatedSignature.t -> overridden_signature:AnnotatedSignature.t -> unit
Check both params and return values for complying for co- and contravariance
val check_overridden_annotations : Absint.IntraproceduralAnalysis.t -> (IR.Procdesc.Node.t -> IR.Procdesc.Node.t) -> AnnotatedSignature.t -> unit
Checks if the annotations are consistent with the derived classes and with the implemented interfaces