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.

8 lines
22 KiB

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Annotations (infer.InferModules.Annotations)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><meta name="generator" content="doc-ock-html v1.0.0-1-g1fc9bf0"/></head><body><nav id="top"><a href="../index.html">Up</a> &mdash; <span class="package">package <a href="../../index.html">infer</a></span></nav><header><h1><span class="keyword">Module</span> <span class="module-path">InferModules.Annotations</span></h1></header><p>Annotations.</p><div class="spec val" id="val-any_thread"><a href="#val-any_thread" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>any_thread : string</code></div><div class="doc"></div></div><div class="spec val" id="val-auto_cleanup"><a href="#val-auto_cleanup" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>auto_cleanup : string</code></div><div class="doc"></div></div><div class="spec val" id="val-expensive"><a href="#val-expensive" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>expensive : string</code></div><div class="doc"></div></div><div class="spec val" id="val-inject_prop"><a href="#val-inject_prop" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>inject_prop : string</code></div><div class="doc"></div></div><div class="spec val" id="val-no_allocation"><a href="#val-no_allocation" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>no_allocation : string</code></div><div class="doc"></div></div><div class="spec val" id="val-nullable"><a href="#val-nullable" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>nullable : string</code></div><div class="doc"></div></div><div class="spec val" id="val-nonnull"><a href="#val-nonnull" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>nonnull : string</code></div><div class="doc"></div></div><div class="spec val" id="val-performance_critical"><a href="#val-performance_critical" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>performance_critical : string</code></div><div class="doc"></div></div><div class="spec val" id="val-present"><a href="#val-present" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>present : string</code></div><div class="doc"></div></div><div class="spec val" id="val-prop"><a href="#val-prop" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>prop : string</code></div><div class="doc"></div></div><div class="spec val" id="val-for_non_ui_thread"><a href="#val-for_non_ui_thread" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>for_non_ui_thread : string</code></div><div class="doc"></div></div><div class="spec val" id="val-for_ui_thread"><a href="#val-for_ui_thread" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>for_ui_thread : string</code></div><div class="doc"></div></div><div class="spec val" id="val-guarded_by"><a href="#val-guarded_by" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>guarded_by : string</code></div><div class="doc"></div></div><div class="spec val" id="val-suppress_lint"><a href="#val-suppress_lint" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>suppress_lint : string</code></div><div class="doc"></div></div><div class="spec val" id="val-thread_confined"><a href="#val-thread_confined" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>thread_confined : string</code></div><div class="doc"></div></div><div class="spec val" id="val-thread_safe"><a href="#val-thread_safe" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>thread_safe : string</code></div><div class="doc"></div></div><div class="spec val" id="val-ui_thread"><a href="#val-ui_thread" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>ui_thread : string</code></div><div class="doc"></div></div><div class="spec val" id="val-visibleForTesting"><a href="#val-visibleForTesting" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>visibleForTesting : string</code></div><div class="doc"></div></div><div class="spec val" id="val-annot_ends_with"><a href="#val-annot_ends_with" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>annot_ends_with : <a href="../../../InferIR/InferIR/Annot/index.html#type-t">InferIR.Annot.t</a> <span class="keyword">&#8209;&gt;</span> string <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"><p><code class="code">annot_ends_with annot ann_name</code> returns true if the class name of <code class="code">annot</code>, without the package,
is equal to <code class="code">ann_name</code></p></div></div><div class="spec val" id="val-ia_ends_with"><a href="#val-ia_ends_with" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>ia_ends_with : <a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a> <span class="keyword">&#8209;&gt;</span> string <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"><p>Check if there is an annotation in <code class="code">ia</code> which ends with the given name</p></div></div><div class="spec val" id="val-ia_has_annotation_with"><a href="#val-ia_has_annotation_with" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>ia_has_annotation_with : <a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a> <span class="keyword">&#8209;&gt;</span> (<a href="../../../InferIR/InferIR/Annot/index.html#type-t">InferIR.Annot.t</a> <span class="keyword">&#8209;&gt;</span> bool) <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"></div></div><div class="spec val" id="val-ia_get_strict"><a href="#val-ia_get_strict" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>ia_get_strict : <a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../../InferIR/InferIR/Annot/index.html#type-t">InferIR.Annot.t</a> option</code></div><div class="doc"></div></div><div class="spec val" id="val-ia_is_false_on_null"><a href="#val-ia_is_false_on_null" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>ia_is_false_on_null : <a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"></div></div><div class="spec val" id="val-ia_is_initializer"><a href="#val-ia_is_initializer" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>ia_is_initializer : <a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"></div></div><div class="spec val" id="val-ia_is_field_injector_readonly"><a href="#val-ia_is_field_injector_readonly" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>ia_is_field_injector_readonly : <a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"><p>Annotations for readonly injectors.
The injector framework initializes the field but does not write null into it.</p></div></div><div class="spec val" id="val-ia_is_field_injector_readwrite"><a href="#val-ia_is_field_injector_readwrite" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>ia_is_field_injector_readwrite : <a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"><p>Annotations for read-write injectors.
The injector framework initializes the field and can write null into it.</p></div></div><div class="spec val" id="val-ia_is_mutable"><a href="#val-ia_is_mutable" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>ia_is_mutable : <a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"></div></div><div class="spec val" id="val-ia_is_nonnull"><a href="#val-ia_is_nonnull" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>ia_is_nonnull : <a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"></div></div><div class="spec val" id="val-ia_is_nullable"><a href="#val-ia_is_nullable" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>ia_is_nullable : <a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"></div></div><div class="spec val" id="val-ia_is_present"><a href="#val-ia_is_present" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>ia_is_present : <a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"></div></div><div class="spec val" id="val-ia_is_true_on_null"><a href="#val-ia_is_true_on_null" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>ia_is_true_on_null : <a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"></div></div><div class="spec val" id="val-ia_is_verify"><a href="#val-ia_is_verify" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>ia_is_verify : <a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"></div></div><div class="spec val" id="val-ia_is_expensive"><a href="#val-ia_is_expensive" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>ia_is_expensive : <a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"></div></div><div class="spec val" id="val-ia_is_functional"><a href="#val-ia_is_functional" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>ia_is_functional : <a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"></div></div><div class="spec val" id="val-ia_is_propagates_nullable"><a href="#val-ia_is_propagates_nullable" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>ia_is_propagates_nullable : <a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"></div></div><div class="spec val" id="val-ia_is_ignore_allocations"><a href="#val-ia_is_ignore_allocations" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>ia_is_ignore_allocations : <a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"></div></div><div class="spec val" id="val-ia_is_inject"><a href="#val-ia_is_inject" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>ia_is_inject : <a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"></div></div><div class="spec val" id="val-ia_is_suppress_lint"><a href="#val-ia_is_suppress_lint" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>ia_is_suppress_lint : <a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"></div></div><div class="spec val" id="val-ia_is_on_event"><a href="#val-ia_is_on_event" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>ia_is_on_event : <a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"></div></div><div class="spec val" id="val-ia_is_on_bind"><a href="#val-ia_is_on_bind" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>ia_is_on_bind : <a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"></div></div><div class="spec val" id="val-ia_is_on_mount"><a href="#val-ia_is_on_mount" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>ia_is_on_mount : <a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"></div></div><div class="spec val" id="val-ia_is_on_unbind"><a href="#val-ia_is_on_unbind" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>ia_is_on_unbind : <a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"></div></div><div class="spec val" id="val-ia_is_on_unmount"><a href="#val-ia_is_on_unmount" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>ia_is_on_unmount : <a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"></div></div><div class="spec val" id="val-ia_is_not_thread_safe"><a href="#val-ia_is_not_thread_safe" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>ia_is_not_thread_safe : <a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"></div></div><div class="spec val" id="val-ia_is_returns_ownership"><a href="#val-ia_is_returns_ownership" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>ia_is_returns_ownership : <a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"></div></div><div class="spec val" id="val-ia_is_synchronized_collection"><a href="#val-ia_is_synchronized_collection" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>ia_is_synchronized_collection : <a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"></div></div><div class="spec val" id="val-ia_is_thread_safe"><a href="#val-ia_is_thread_safe" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>ia_is_thread_safe : <a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"></div></div><div class="spec val" id="val-ia_is_thread_confined"><a href="#val-ia_is_thread_confined" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>ia_is_thread_confined : <a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"></div></div><div class="spec val" id="val-ia_is_thrift_service"><a href="#val-ia_is_thrift_service" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>ia_is_thrift_service : <a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"></div></div><div class="spec val" id="val-ia_is_ui_thread"><a href="#val-ia_is_ui_thread" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>ia_is_ui_thread : <a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"></div></div><div class="spec val" id="val-ia_is_volatile"><a href="#val-ia_is_volatile" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>ia_is_volatile : <a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"></div></div><div class="spec val" id="val-pdesc_get_return_annot"><a href="#val-pdesc_get_return_annot" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>pdesc_get_return_annot : <a href="../../../InferIR/InferIR/Procdesc/index.html#type-t">InferIR.Procdesc.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a></code></div><div class="doc"><p>get the list of annotations on the return value of <code class="code">pdesc</code></p></div></div><div class="spec val" id="val-pdesc_has_return_annot"><a href="#val-pdesc_has_return_annot" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>pdesc_has_return_annot : <a href="../../../InferIR/InferIR/Procdesc/index.html#type-t">InferIR.Procdesc.t</a> <span class="keyword">&#8209;&gt;</span> (<a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a> <span class="keyword">&#8209;&gt;</span> bool) <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"><p>return true if the given predicate evaluates to true on the annotation of <code class="code">pdesc</code>'s return
value</p></div></div><div class="spec val" id="val-pname_has_return_annot"><a href="#val-pname_has_return_annot" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>pname_has_return_annot : <a href="../../../InferIR/InferIR/Typ/Procname/index.html#type-t">InferIR.Typ.Procname.t</a> <span class="keyword">&#8209;&gt;</span> attrs_of_pname:(<a href="../../../InferIR/InferIR/Typ/Procname/index.html#type-t">InferIR.Typ.Procname.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../../InferIR/InferIR/ProcAttributes/index.html#type-t">InferIR.ProcAttributes.t</a> option) <span class="keyword">&#8209;&gt;</span> (<a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a> <span class="keyword">&#8209;&gt;</span> bool) <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"><p>return true if the given predicate evaluates to true on the annotation of <code class="code">pname</code>'s return
value. the function <code class="code">attrs_of_pname</code> should resolve the proc attributes of <code class="code">pname</code>.
Specs.proc_resolve_attributes is a good choice for this resolution function.</p></div></div><div class="spec val" id="val-pdesc_return_annot_ends_with"><a href="#val-pdesc_return_annot_ends_with" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>pdesc_return_annot_ends_with : <a href="../../../InferIR/InferIR/Procdesc/index.html#type-t">InferIR.Procdesc.t</a> <span class="keyword">&#8209;&gt;</span> string <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"><p>return true if <code class="code">pdesc</code>'s return value is annotated with a value ending with the given string</p></div></div><div class="spec val" id="val-ma_has_annotation_with"><a href="#val-ma_has_annotation_with" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>ma_has_annotation_with : <a href="../../../InferIR/InferIR/Annot/Method/index.html#type-t">InferIR.Annot.Method.t</a> <span class="keyword">&#8209;&gt;</span> (<a href="../../../InferIR/InferIR/Annot/index.html#type-t">InferIR.Annot.t</a> <span class="keyword">&#8209;&gt;</span> bool) <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"></div></div><div class="spec val" id="val-field_has_annot"><a href="#val-field_has_annot" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>field_has_annot : <a href="../../../InferIR/InferIR/Typ/Fieldname/index.html#type-t">InferIR.Typ.Fieldname.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../../InferIR/InferIR/Typ/Struct/index.html#type-t">InferIR.Typ.Struct.t</a> <span class="keyword">&#8209;&gt;</span> (<a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a> <span class="keyword">&#8209;&gt;</span> bool) <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"></div></div><div class="spec val" id="val-struct_typ_has_annot"><a href="#val-struct_typ_has_annot" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>struct_typ_has_annot : <a href="../../../InferIR/InferIR/Typ/Struct/index.html#type-t">InferIR.Typ.Struct.t</a> <span class="keyword">&#8209;&gt;</span> (<a href="../../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a> <span class="keyword">&#8209;&gt;</span> bool) <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"><p>return true if the given predicate evaluates to true on some annotation of <code class="code">struct_typ</code></p></div></div></body></html>