Concurrency.StarvationModelsval may_block : IR.Tenv.t -> IR.Procname.t -> Absint.HilExp.t list -> boolis the method call potentially blocking, given the actuals passed?
val may_do_ipc : IR.Tenv.t -> IR.Procname.t -> Absint.HilExp.t list -> boolval is_regex_op : IR.Tenv.t -> IR.Procname.t -> Absint.HilExp.t list -> boolval is_strict_mode_violation :
IR.Tenv.t ->
IR.Procname.t ->
Absint.HilExp.t list ->
boolval is_monitor_wait :
IR.Tenv.t ->
IR.Procname.t ->
Absint.HilExp.t list ->
boolval is_synchronized_library_call : IR.Tenv.t -> IR.Procname.t -> booldoes the method call lock-then-unlock the underlying object? legacy Java containers like Vector do this, and can interact with explicit locking
val should_skip_analysis :
IR.Tenv.t ->
IR.Procname.t ->
Absint.HilExp.t list ->
boolshould we treat a method call as skip (eg library methods in guava) to avoid FPs?
val is_annotated_nonblocking : IR.Tenv.t -> IR.Procname.t -> boolis procedure transitively annotated @Nonblocking
val is_annotated_lockless : IR.Tenv.t -> IR.Procname.t -> boolis procedure transitively annotated @Lockless
val schedules_work : IR.Tenv.t -> IR.Procname.t -> boolcall known to schedule runnable first argument to some executor/handler or subclass
an instance field holding a reference to an executor may be annotated as running on UI/non-UI thread
val equal_scheduler_thread_constraint :
scheduler_thread_constraint ->
scheduler_thread_constraint ->
boolval get_executor_thread_annotation_constraint :
IR.Tenv.t ->
Absint.HilExp.AccessExpression.t ->
scheduler_thread_constraint optiongiven an executor receiver, get its thread constraint, if any. None means lookup somehow failed, whereas Some UnknownThread means the receiver is an unannotated executor.
val get_run_method_from_runnable :
IR.Tenv.t ->
Absint.HilExp.AccessExpression.t ->
IR.Procname.t optiongiven a receiver, find the run() method in the appropriate class
val get_returned_executor :
IR.Tenv.t ->
IR.Procname.t ->
Absint.HilExp.t list ->
scheduler_thread_constraint optiondoes the function return an executor and of which thread?
val schedules_first_arg_on_ui_thread : IR.Tenv.t -> IR.Procname.t -> boolmethod call known to directly schedule the runnable object provided as first procedure argument on the UI thread
val schedules_second_arg_on_ui_thread : IR.Tenv.t -> IR.Procname.t -> boolmethod call known to directly schedule the runnable object provided as second procedure argument on a background thread
val schedules_first_arg_on_bg_thread : IR.Tenv.t -> IR.Procname.t -> boolmethod call known to directly the runnable object provided as first procedure argument on a background thread
val is_getMainLooper :
IR.Tenv.t ->
IR.Procname.t ->
Absint.HilExp.t list ->
boolval is_handler_constructor :
IR.Tenv.t ->
IR.Procname.t ->
Absint.HilExp.t list ->
boolval is_thread_constructor :
IR.Tenv.t ->
IR.Procname.t ->
Absint.HilExp.t list ->
boolval is_future_get : IR.Tenv.t -> IR.Procname.t -> Absint.HilExp.t list -> boolval is_future_is_done :
IR.Tenv.t ->
IR.Procname.t ->
Absint.HilExp.t list ->
boolval is_assume_true : IR.Tenv.t -> IR.Procname.t -> Absint.HilExp.t list -> boolis the callee equivalent to assuming its first argument true
val is_java_main_method : IR.Procname.t -> booldoes the method look like a Java main
val may_execute_arbitrary_code :
IR.Tenv.t ->
IR.Procname.t ->
Absint.HilExp.t list ->
boolfor example com.google.common.util.concurrent.SettableFuture.set