Module Concurrency.StarvationModels
val 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_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
type scheduler_thread_constraint=|ForUIThread|ForNonUIThread|ForUnknownThreadan 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 -> bool
val 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.
Nonemeans lookup somehow failed, whereasSome UnknownThreadmeans 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