You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2 lines
22 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>PatternMatch (infer.InferModules.PatternMatch)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc %%VERSION%%"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">infer</a> &#x00BB; <a href="../index.html">InferModules</a> &#x00BB; PatternMatch</nav><h1>Module <code>InferModules.PatternMatch</code></h1></header><aside><p>Module for Pattern matching.</p></aside><dl><dt class="spec value" id="val-get_this_type"><a href="#val-get_this_type" class="anchor"></a><code><span class="keyword">val</span> get_this_type : <a href="../../../InferIR/InferIR/ProcAttributes/index.html#type-t">InferIR.ProcAttributes.t</a> <span>&#45;&gt;</span> <span><a href="../../../InferIR/InferIR/Typ/index.html#type-t">InferIR.Typ.t</a> option</span></code></dt><dd><p>Get the this type of a procedure</p></dd></dl><dl><dt class="spec value" id="val-get_type_name"><a href="#val-get_type_name" class="anchor"></a><code><span class="keyword">val</span> get_type_name : <a href="../../../InferIR/InferIR/Typ/index.html#type-t">InferIR.Typ.t</a> <span>&#45;&gt;</span> string</code></dt><dd><p>Get the name of a type</p></dd></dl><dl><dt class="spec value" id="val-get_vararg_type_names"><a href="#val-get_vararg_type_names" class="anchor"></a><code><span class="keyword">val</span> get_vararg_type_names : <a href="../../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span>&#45;&gt;</span> <a href="../../../InferIR/InferIR/Procdesc/Node/index.html#type-t">InferIR.Procdesc.Node.t</a> <span>&#45;&gt;</span> <a href="../../../InferIR/InferIR/Pvar/index.html#type-t">InferIR.Pvar.t</a> <span>&#45;&gt;</span> <span>string list</span></code></dt><dd><p>Get the type names of a variable argument</p></dd></dl><dl><dt class="spec value" id="val-method_is_initializer"><a href="#val-method_is_initializer" class="anchor"></a><code><span class="keyword">val</span> method_is_initializer : <a href="../../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span>&#45;&gt;</span> <a href="../../../InferIR/InferIR/ProcAttributes/index.html#type-t">InferIR.ProcAttributes.t</a> <span>&#45;&gt;</span> bool</code></dt><dd><p>Check if the method is one of the known initializer methods.</p></dd></dl><dl><dt class="spec value" id="val-is_getter"><a href="#val-is_getter" class="anchor"></a><code><span class="keyword">val</span> is_getter : <a href="../../../InferIR/InferIR/Typ/Procname/Java/index.html#type-t">InferIR.Typ.Procname.Java.t</a> <span>&#45;&gt;</span> bool</code></dt><dd><p>Is this a getter proc name?</p></dd></dl><dl><dt class="spec value" id="val-is_subtype"><a href="#val-is_subtype" class="anchor"></a><code><span class="keyword">val</span> is_subtype : <a href="../../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span>&#45;&gt;</span> <a href="../../../InferIR/InferIR/Typ/Name/index.html#type-t">InferIR.Typ.Name.t</a> <span>&#45;&gt;</span> <a href="../../../InferIR/InferIR/Typ/Name/index.html#type-t">InferIR.Typ.Name.t</a> <span>&#45;&gt;</span> bool</code></dt><dd><p>Is the type a transitive subtype of the typename?</p></dd></dl><dl><dt class="spec value" id="val-is_subtype_of_str"><a href="#val-is_subtype_of_str" class="anchor"></a><code><span class="keyword">val</span> is_subtype_of_str : <a href="../../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span>&#45;&gt;</span> <a href="../../../InferIR/InferIR/Typ/Name/index.html#type-t">InferIR.Typ.Name.t</a> <span>&#45;&gt;</span> string <span>&#45;&gt;</span> bool</code></dt><dd><p>Resolve <code>typ_str</code> in <code>tenv</code>, then check <code>typ</code> &lt;: <code>typ_str</code></p></dd></dl><dl><dt class="spec value" id="val-implements_arrays"><a href="#val-implements_arrays" class="anchor"></a><code><span class="keyword">val</span> implements_arrays : <a href="../../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span>&#45;&gt;</span> string <span>&#45;&gt;</span> bool</code></dt><dd><p>Check whether class implements Java's Arrays</p></dd></dl><dl><dt class="spec value" id="val-implements_iterator"><a href="#val-implements_iterator" class="anchor"></a><code><span class="keyword">val</span> implements_iterator : <a href="../../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span>&#45;&gt;</span> string <span>&#45;&gt;</span> bool</code></dt><dd><p>Check whether class implements Java's Iterator</p></dd></dl><dl><dt class="spec value" id="val-implements_collection"><a href="#val-implements_collection" class="anchor"></a><code><span class="keyword">val</span> implements_collection : <a href="../../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span>&#45;&gt;</span> string <span>&#45;&gt;</span> bool</code></dt><dd><p>Check whether class implements a Java's Collection</p></dd></dl><dl><dt class="spec value" id="val-implements_collections"><a href="#val-implements_collections" class="anchor"></a><code><span class="keyword">val</span> implements_collections : <a href="../../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span>&#45;&gt;</span> string <span>&#45;&gt;</span> bool</code></dt><dd><p>Check whether class implements a Java's Collections</p></dd></dl><dl><dt class="spec value" id="val-implements_pseudo_collection"><a href="#val-implements_pseudo_collection" class="anchor"></a><code><span class="keyword">val</span> implements_pseudo_collection : <a href="../../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span>&#45;&gt;</span> string <span>&#45;&gt;</span> bool</code></dt><dd><p>Check whether class implements a pseudo Collection with support for get() and size() methods</p></dd></dl><dl><dt class="spec value" id="val-implements_enumeration"><a href="#val-implements_enumeration" class="anchor"></a><code><span class="keyword">val</span> implements_enumeration : <a href="../../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span>&#45;&gt;</span> string <span>&#45;&gt;</span> bool</code></dt><dd><p>Check whether class implements a Java's Enumeration</p></dd></dl><dl><dt class="spec value" id="val-implements_jackson"><a href="#val-implements_jackson" class="anchor"></a><code><span class="keyword">val</span> implements_jackson : string <span>&#45;&gt;</span> <a href="../../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span>&#45;&gt;</span> string <span>&#45;&gt;</span> bool</code></dt><dd><p>Check whether class implements a class from Jackson</p></dd></dl><dl><dt class="spec value" id="val-implements_org_json"><a href="#val-implements_org_json" class="anchor"></a><code><span class="keyword">val</span> implements_org_json : string <span>&#45;&gt;</span> <a href="../../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span>&#45;&gt;</span> string <span>&#45;&gt;</span> bool</code></dt><dd><p>Check whether class implements a class from Json</p></dd></dl><dl><dt class="spec value" id="val-implements_inject"><a href="#val-implements_inject" class="anchor"></a><code><span class="keyword">val</span> implements_inject : string <span>&#45;&gt;</span> <a href="../../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span>&#45;&gt;</span> string <span>&#45;&gt;</span> bool</code></dt><dd><p>Check whether class implements a Javax Inject</p></dd></dl><dl><dt class="spec value" id="val-implements_io"><a href="#val-implements_io" class="anchor"></a><code><span class="keyword">val</span> implements_io : string <span>&#45;&gt;</span> <a href="../../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span>&#45;&gt;</span> string <span>&#45;&gt;</span> bool</code></dt><dd><p>Check whether class implements a Java IO</p></dd></dl><dl><dt class="spec value" id="val-implements_map"><a href="#val-implements_map" class="anchor"></a><code><span class="keyword">val</span> implements_map : <a href="../../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span>&#45;&gt;</span> string <span>&#45;&gt;</span> bool</code></dt><dd><p>Check whether class implements a Java's Map</p></dd></dl><dl><dt class="spec value" id="val-implements_set"><a href="#val-implements_set" class="anchor"></a><code><span class="keyword">val</span> implements_set : <a href="../../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span>&#45;&gt;</span> string <span>&#45;&gt;</span> bool</code></dt><dd><p>Check whether class implements a Java's Set</p></dd></dl><dl><dt class="spec value" id="val-implements_map_entry"><a href="#val-implements_map_entry" class="anchor"></a><code><span class="keyword">val</span> implements_map_entry : <a href="../../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span>&#45;&gt;</span> string <span>&#45;&gt;</span> bool</code></dt><dd><p>Check whether class implements a Java's Map$Entry</p></dd></dl><dl><dt class="spec value" id="val-implements_queue"><a href="#val-implements_queue" class="anchor"></a><code><span class="keyword">val</span> implements_queue : <a href="../../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span>&#45;&gt;</span> string <span>&#45;&gt;</span> bool</code></dt><dd><p>Check whether class implements a Java's Queue</p></dd></dl><dl><dt class="spec value" id="val-implements_lang"><a href="#val-implements_lang" class="anchor"></a><code><span class="keyword">val</span> implements_lang : string <span>&#45;&gt;</span> <a href="../../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span>&#45;&gt;</span> string <span>&#45;&gt;</span> bool</code></dt><dd><p>Check whether class implements a Java's lang</p></dd></dl><dl><dt class="spec value" id="val-implements_list"><a href="#val-implements_list" class="anchor"></a><code><span class="keyword">val</span> implements_list : <a href="../../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span>&#45;&gt;</span> string <span>&#45;&gt;</span> bool</code></dt><dd><p>Check whether class implements a Java's list</p></dd></dl><dl><dt class="spec value" id="val-implements_google"><a href="#val-implements_google" class="anchor"></a><code><span class="keyword">val</span> implements_google : string <span>&#45;&gt;</span> <a href="../../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span>&#45;&gt;</span> string <span>&#45;&gt;</span> bool</code></dt><dd><p>Check whether class implements a class of Google</p></dd></dl><dl><dt class="spec value" id="val-implements_android"><a href="#val-implements_android" class="anchor"></a><code><span class="keyword">val</span> implements_android : string <span>&#45;&gt;</span> <a href="../../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span>&#45;&gt;</span> string <span>&#45;&gt;</span> bool</code></dt><dd><p>Check whether class implements a class of Android</p></dd></dl><dl><dt class="spec value" id="val-supertype_exists"><a href="#val-supertype_exists" class="anchor"></a><code><span class="keyword">val</span> supertype_exists : <a href="../../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span>&#45;&gt;</span> <span>(<a href="../../../InferIR/InferIR/Typ/Name/index.html#type-t">InferIR.Typ.Name.t</a> <span>&#45;&gt;</span> <a href="../../../InferIR/InferIR/Typ/Struct/index.html#type-t">InferIR.Typ.Struct.t</a> <span>&#45;&gt;</span> bool)</span> <span>&#45;&gt;</span> <a href="../../../InferIR/InferIR/Typ/Name/index.html#type-t">InferIR.Typ.Name.t</a> <span>&#45;&gt;</span> bool</code></dt><dd><p>Holds iff the predicate holds on a supertype of the named type, including the type itself</p></dd></dl><dl><dt class="spec value" id="val-supertype_find_map_opt"><a href="#val-supertype_find_map_opt" class="anchor"></a><code><span class="keyword">val</span> supertype_find_map_opt : <a href="../../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span>&#45;&gt;</span> <span>(<a href="../../../InferIR/InferIR/Typ/Name/index.html#type-t">InferIR.Typ.Name.t</a> <span>&#45;&gt;</span> <span><span class="type-var">'a</span> option</span>)</span> <span>&#45;&gt;</span> <a href="../../../InferIR/InferIR/Typ/Name/index.html#type-t">InferIR.Typ.Name.t</a> <span>&#45;&gt;</span> <span><span class="type-var">'a</span> option</span></code></dt><dd><p>Return the first non-None result found when applying the given function to supertypes of the named type, including the type itself</p></dd></dl><dl><dt class="spec value" id="val-java_get_vararg_values"><a href="#val-java_get_vararg_values" class="anchor"></a><code><span class="keyword">val</span> java_get_vararg_values : <a href="../../../InferIR/InferIR/Procdesc/Node/index.html#type-t">InferIR.Procdesc.Node.t</a> <span>&#45;&gt;</span> <a href="../../../InferIR/InferIR/Pvar/index.html#type-t">InferIR.Pvar.t</a> <span>&#45;&gt;</span> <a href="../Idenv/index.html#type-t">Idenv.t</a> <span>&#45;&gt;</span> <span><a href="../../../InferIR/InferIR/Exp/index.html#type-t">InferIR.Exp.t</a> list</span></code></dt><dd><p>Get the values of a vararg parameter given the pvar used to assign the elements.</p></dd></dl><dl><dt class="spec value" id="val-proc_calls"><a href="#val-proc_calls" class="anchor"></a><code><span class="keyword">val</span> proc_calls : <span>(<a href="../../../InferIR/InferIR/Typ/Procname/index.html#type-t">InferIR.Typ.Procname.t</a> <span>&#45;&gt;</span> <span><a href="../../../InferIR/InferIR/ProcAttributes/index.html#type-t">InferIR.ProcAttributes.t</a> option</span>)</span> <span>&#45;&gt;</span> <a href="../../../InferIR/InferIR/Procdesc/index.html#type-t">InferIR.Procdesc.t</a> <span>&#45;&gt;</span> <span>(<a href="../../../InferIR/InferIR/Typ/Procname/index.html#type-t">InferIR.Typ.Procname.t</a> <span>&#45;&gt;</span> <a href="../../../InferIR/InferIR/ProcAttributes/index.html#type-t">InferIR.ProcAttributes.t</a> <span>&#45;&gt;</span> bool)</span> <span>&#45;&gt;</span> <span><span>(<a href="../../../InferIR/InferIR/Typ/Procname/index.html#type-t">InferIR.Typ.Procname.t</a> * <a href="../../../InferIR/InferIR/ProcAttributes/index.html#type-t">InferIR.ProcAttributes.t</a>)</span> list</span></code></dt><dd><p>Return the callees that satisfy <code>filter</code>.</p></dd></dl><dl><dt class="spec value" id="val-override_find"><a href="#val-override_find" class="anchor"></a><code><span class="keyword">val</span> override_find : <span>?&#8288;check_current_type:bool</span> <span>&#45;&gt;</span> <span>(<a href="../../../InferIR/InferIR/Typ/Procname/index.html#type-t">InferIR.Typ.Procname.t</a> <span>&#45;&gt;</span> bool)</span> <span>&#45;&gt;</span> <a href="../../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span>&#45;&gt;</span> <a href="../../../InferIR/InferIR/Typ/Procname/index.html#type-t">InferIR.Typ.Procname.t</a> <span>&#45;&gt;</span> <span><a href="../../../InferIR/InferIR/Typ/Procname/index.html#type-t">InferIR.Typ.Procname.t</a> option</span></code></dt><dd><p>Return a method which overrides <code>procname</code> and satisfies <code>f</code> (including <code>procname</code> itself when <code>check_current_type</code> is true, which it is by default).</p></dd></dl><dl><dt class="spec value" id="val-override_exists"><a href="#val-override_exists" class="anchor"></a><code><span class="keyword">val</span> override_exists : <span>?&#8288;check_current_type:bool</span> <span>&#45;&gt;</span> <span>(<a href="../../../InferIR/InferIR/Typ/Procname/index.html#type-t">InferIR.Typ.Procname.t</a> <span>&#45;&gt;</span> bool)</span> <span>&#45;&gt;</span> <a href="../../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span>&#45;&gt;</span> <a href="../../../InferIR/InferIR/Typ/Procname/index.html#type-t">InferIR.Typ.Procname.t</a> <span>&#45;&gt;</span> bool</code></dt><dd><p>Return true if applying the given predicate to an override of <code>procname</code> (including <code>procname</code> itself when <code>check_current_type</code> is true, which it is by default) returns true.</p></dd></dl><dl><dt class="spec value" id="val-override_iter"><a href="#val-override_iter" class="anchor"></a><code><span class="keyword">val</span> override_iter : <span>(<a href="../../../InferIR/InferIR/Typ/Procname/index.html#type-t">InferIR.Typ.Procname.t</a> <span>&#45;&gt;</span> unit)</span> <span>&#45;&gt;</span> <a href="../../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span>&#45;&gt;</span> <a href="../../../InferIR/InferIR/Typ/Procname/index.html#type-t">InferIR.Typ.Procname.t</a> <span>&#45;&gt;</span> unit</code></dt><dd><p>Apply the given predicate to procname and each override of <code>procname</code>. For the moment, this only works for Java</p></dd></dl><dl><dt class="spec value" id="val-lookup_attributes"><a href="#val-lookup_attributes" class="anchor"></a><code><span class="keyword">val</span> lookup_attributes : <a href="../../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span>&#45;&gt;</span> <a href="../../../InferIR/InferIR/Typ/Procname/index.html#type-t">InferIR.Typ.Procname.t</a> <span>&#45;&gt;</span> <span><a href="../../../InferIR/InferIR/ProcAttributes/index.html#type-t">InferIR.ProcAttributes.t</a> option</span></code></dt><dt class="spec value" id="val-type_get_annotation"><a href="#val-type_get_annotation" class="anchor"></a><code><span class="keyword">val</span> type_get_annotation : <a href="../../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span>&#45;&gt;</span> <a href="../../../InferIR/InferIR/Typ/index.html#type-t">InferIR.Typ.t</a> <span>&#45;&gt;</span> <span><a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a> option</span></code></dt><dt class="spec value" id="val-type_get_class_name"><a href="#val-type_get_class_name" class="anchor"></a><code><span class="keyword">val</span> type_get_class_name : <a href="../../../InferIR/InferIR/Typ/index.html#type-t">InferIR.Typ.t</a> <span>&#45;&gt;</span> <span><a href="../../../InferIR/InferIR/Typ/Name/index.html#type-t">InferIR.Typ.Name.t</a> option</span></code></dt><dd><p>Get the class name of the type</p></dd></dl><dl><dt class="spec value" id="val-type_is_class"><a href="#val-type_is_class" class="anchor"></a><code><span class="keyword">val</span> type_is_class : <a href="../../../InferIR/InferIR/Typ/index.html#type-t">InferIR.Typ.t</a> <span>&#45;&gt;</span> bool</code></dt><dd><p>Is the type a class type</p></dd></dl><dl><dt class="spec value" id="val-type_is_object"><a href="#val-type_is_object" class="anchor"></a><code><span class="keyword">val</span> type_is_object : <a href="../../../InferIR/InferIR/Typ/index.html#type-t">InferIR.Typ.t</a> <span>&#45;&gt;</span> bool</code></dt><dd><p>Is the type java.lang.Object</p></dd></dl><dl><dt class="spec value" id="val-get_fields_nullified"><a href="#val-get_fields_nullified" class="anchor"></a><code><span class="keyword">val</span> get_fields_nullified : <a href="../../../InferIR/InferIR/Procdesc/index.html#type-t">InferIR.Procdesc.t</a> <span>&#45;&gt;</span> <a href="../../../InferIR/InferIR__Typ/Fieldname/index.html#module-Set">InferIR.Typ.Fieldname.Set</a>.t</code></dt><dd><p>return the set of instance fields that are assigned to a null literal in <code>procdesc</code></p></dd></dl><dl><dt class="spec value" id="val-is_throwable"><a href="#val-is_throwable" class="anchor"></a><code><span class="keyword">val</span> is_throwable : <a href="../../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span>&#45;&gt;</span> <a href="../../../InferIR/InferIR/Typ/Name/index.html#type-t">InferIR.Typ.Name.t</a> <span>&#45;&gt;</span> bool</code></dt><dd><p><code>is_throwable tenv class_name</code> checks if class_name is of type java.lang.Throwable</p></dd></dl><dl><dt class="spec value" id="val-is_runtime_exception"><a href="#val-is_runtime_exception" class="anchor"></a><code><span class="keyword">val</span> is_runtime_exception : <a href="../../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span>&#45;&gt;</span> <a href="../../../InferIR/InferIR/Typ/Name/index.html#type-t">InferIR.Typ.Name.t</a> <span>&#45;&gt;</span> bool</code></dt><dd><p><code>is_runtime_exception tenv class_name</code> checks if classname is of type java.lang.RuntimeException</p></dd></dl><dl><dt class="spec value" id="val-check_class_attributes"><a href="#val-check_class_attributes" class="anchor"></a><code><span class="keyword">val</span> check_class_attributes : <span>(<a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a> <span>&#45;&gt;</span> bool)</span> <span>&#45;&gt;</span> <a href="../../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span>&#45;&gt;</span> <a href="../../../InferIR/InferIR/Typ/Procname/index.html#type-t">InferIR.Typ.Procname.t</a> <span>&#45;&gt;</span> bool</code></dt><dd><p>tests whether any class attributes (e.g., @ThreadSafe) pass check of first argument, including supertypes</p></dd></dl><dl><dt class="spec value" id="val-check_current_class_attributes"><a href="#val-check_current_class_attributes" class="anchor"></a><code><span class="keyword">val</span> check_current_class_attributes : <span>(<a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a> <span>&#45;&gt;</span> bool)</span> <span>&#45;&gt;</span> <a href="../../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span>&#45;&gt;</span> <a href="../../../InferIR/InferIR/Typ/Procname/index.html#type-t">InferIR.Typ.Procname.t</a> <span>&#45;&gt;</span> bool</code></dt><dd><p>tests whether any class attributes (e.g., @ThreadSafe) pass check of first argument, for current class only</p></dd></dl><dl><dt class="spec value" id="val-find_superclasses_with_attributes"><a href="#val-find_superclasses_with_attributes" class="anchor"></a><code><span class="keyword">val</span> find_superclasses_with_attributes : <span>(<a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a> <span>&#45;&gt;</span> bool)</span> <span>&#45;&gt;</span> <a href="../../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span>&#45;&gt;</span> <a href="../../../InferIR/InferIR/Typ/Name/index.html#type-t">InferIR.Typ.Name.t</a> <span>&#45;&gt;</span> <span><a href="../../../InferIR/InferIR/Typ/Name/index.html#type-t">InferIR.Typ.Name.t</a> list</span></code></dt><dd><p>find superclasss with attributes (e.g., @ThreadSafe), including current class</p></dd></dl></div></body></html>