|
|
|
(*
|
|
|
|
* Copyright (c) 2018-present, Facebook, Inc.
|
|
|
|
*
|
|
|
|
* This source code is licensed under the MIT license found in the
|
|
|
|
* LICENSE file in the root directory of this source tree.
|
|
|
|
*)
|
|
|
|
|
|
|
|
open! IStd
|
|
|
|
|
|
|
|
(** pattern matcher for Java methods *)
|
|
|
|
type t = Tenv.t -> Typ.Procname.t -> HilExp.t list -> bool
|
|
|
|
|
|
|
|
val call_matches :
|
|
|
|
?search_superclasses:bool
|
|
|
|
-> ?method_prefix:bool
|
|
|
|
-> ?actuals_pred:(HilExp.t list -> bool)
|
|
|
|
-> string
|
|
|
|
-> string list
|
|
|
|
-> t Staged.t
|
|
|
|
[@@warning "-32"]
|
|
|
|
(** [call_matches C methods] builds a method matcher for calls [C.foo] where
|
|
|
|
[foo] is in [methods]. Optional arguments change default behaviour:
|
|
|
|
- [search_superclasses=true] will match calls [S.foo] where [S] is a superclass of [C].
|
|
|
|
Defaults to [true].
|
|
|
|
- [method_prefix=true] will match calls [C.foo] where [foo] is a prefix of a string in [methods]
|
|
|
|
Defaults to [false].
|
|
|
|
- [actuals_pred] is a predicate that runs on the expressions fed as arguments to the call, and
|
|
|
|
which must return [true] for the matcher to return [true]. The default returns [true]. *)
|
|
|
|
|
|
|
|
type record =
|
|
|
|
{ search_superclasses: bool option
|
|
|
|
; method_prefix: bool option
|
|
|
|
; actuals_pred: (HilExp.t list -> bool) option
|
|
|
|
; classname: string
|
|
|
|
; methods: string list }
|
|
|
|
|
|
|
|
val default : record
|
|
|
|
(** record encapsulating the default arguments of [call_matches]. [classname=""] and [methods=[]].
|
|
|
|
Useful for [with] expressions *)
|
|
|
|
|
|
|
|
val of_record : record -> t
|
|
|
|
(** make a matcher out of a record; optional values use defaults *)
|
|
|
|
|
|
|
|
val of_json : Yojson.Basic.json -> t
|
|
|
|
(** Parse a JSon object into a matcher. The Json object must be a list of records, each
|
|
|
|
corresponding to a single matcher. Each record must have a ["classname"] field with a [string]
|
|
|
|
value, and a ["methods"] field with a list of strings. The record may also have boolean
|
|
|
|
fields ["search_superclasses"] and ["method_prefix"]. If absent, the defaults are used.
|
|
|
|
The resulting matcher matches if one of the matchers in the list does. *)
|
|
|
|
|
|
|
|
val of_list : t list -> t
|
|
|
|
(** Or combinator *)
|