Module Nullsafe.ThirdPartyAnnotationInfo

type signature_info = {
filename : string;

File where the particular signature is stored

line_number : int;

Line number with this signature

signature : ThirdPartyMethod.t;
}
type unique_repr = {
class_name : ThirdPartyMethod.fully_qualified_type;
method_name : ThirdPartyMethod.method_name;
param_types : ThirdPartyMethod.fully_qualified_type list;
}

The minimum information that is needed to _uniquely_ identify the method. That why we don't

  • include e.g. return type, access quilifiers, or whether the method is static (because Java
  • overload resolution rules ignore these things). In contrast, parameter types are essential,
  • because Java allows several methods with different types.
val pp_unique_repr : Stdlib.Format.formatter -> unique_repr -> unit
val unique_repr_of_java_proc_name : IR.Procname.Java.t -> unique_repr
type storage
val create_storage : unit -> storage
type file_parsing_error = {
line_number : int;
unparsable_method : string;
parsing_error : ThirdPartyMethod.parsing_error;
}
val pp_parsing_error : Stdlib.Format.formatter -> file_parsing_error -> unit
val add_from_signature_file : storage -> filename:string -> lines:string list -> (storagefile_parsing_error) IStdlib.IStd.result

Parse the information from the signature file, and add it to the storage

val find_nullability_info : storage -> unique_repr -> signature_info option

The main method. Do we have an information about the third-party method? If we do not, or it is not a third-party method, returns None. Otherwise returns the nullability information.

If the package is third-party, return the relevant .sig file to add signatures for this package.

If the function is third-party (based on its package), return relevant .sig file

val is_third_party_proc : storage -> IR.Procname.Java.t -> bool

Checks whether a required procname comes from third-party code based on available .sig files and config flags. NOTE: considering config flags is done for compatibility with the legacy behaviour and will be removed in the future

val is_third_party_typ : storage -> IR.Typ.t -> bool

See is_third_party_proc.

val is_third_party_class_name : storage -> IR.JavaClassName.t -> bool

See is_third_party_proc.