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
24 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>EradicateChecks (infer.Nullsafe.EradicateChecks)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.0"/><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">Nullsafe</a> &#x00BB; EradicateChecks</nav><h1>Module <code>Nullsafe.EradicateChecks</code></h1></header><aside><p>Module for the checks called by Eradicate.</p></aside><div class="spec module" id="module-L"><a href="#module-L" class="anchor"></a><code><span class="keyword">module</span> L = <a href="../../IBase/index.html#module-Logging">IBase.Logging</a></code></div><dl><dt class="spec value" id="val-explain_expr"><a href="#val-explain_expr" class="anchor"></a><code><span class="keyword">val</span> explain_expr : <a href="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a> <span>&#45;&gt;</span> <a href="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a> <span>&#45;&gt;</span> <a href="../../IR/Exp/index.html#type-t">IR.Exp.t</a> <span>&#45;&gt;</span> <span>string option</span></code></dt><dt class="spec value" id="val-is_virtual"><a href="#val-is_virtual" class="anchor"></a><code><span class="keyword">val</span> is_virtual : <span><a href="../AnnotatedSignature/index.html#type-param_signature">AnnotatedSignature.param_signature</a> list</span> <span>&#45;&gt;</span> bool</code></dt><dt class="spec value" id="val-check_object_dereference"><a href="#val-check_object_dereference" class="anchor"></a><code><span class="keyword">val</span> check_object_dereference : <a href="../../Absint/IntraproceduralAnalysis/index.html#type-t">Absint.IntraproceduralAnalysis.t</a> <span>&#45;&gt;</span> <span>nullsafe_mode:<a href="../NullsafeMode/index.html#type-t">NullsafeMode.t</a></span> <span>&#45;&gt;</span> <span>(<a href="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a> <span>&#45;&gt;</span> <a href="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a>)</span> <span>&#45;&gt;</span> <a href="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a> <span>&#45;&gt;</span> <a href="../TypeErr/InstrRef/index.html#type-t">TypeErr.InstrRef.t</a> <span>&#45;&gt;</span> <a href="../../IR/Exp/index.html#type-t">IR.Exp.t</a> <span>&#45;&gt;</span> <a href="../DereferenceRule/ReportableViolation/index.html#type-dereference_type">DereferenceRule.ReportableViolation.dereference_type</a> <span>&#45;&gt;</span> <a href="../InferredNullability/index.html#type-t">InferredNullability.t</a> <span>&#45;&gt;</span> <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a> <span>&#45;&gt;</span> unit</code></dt><dt class="spec value" id="val-check_condition_for_redundancy"><a href="#val-check_condition_for_redundancy" class="anchor"></a><code><span class="keyword">val</span> check_condition_for_redundancy : <a href="../../Absint/IntraproceduralAnalysis/index.html#type-t">Absint.IntraproceduralAnalysis.t</a> <span>&#45;&gt;</span> <span>is_always_true:bool</span> <span>&#45;&gt;</span> <span>(<a href="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a> <span>&#45;&gt;</span> <a href="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a>)</span> <span>&#45;&gt;</span> <a href="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a> <span>&#45;&gt;</span> <span>nullsafe_mode:<a href="../NullsafeMode/index.html#type-t">NullsafeMode.t</a></span> <span>&#45;&gt;</span> <a href="../../IR/Exp/index.html#type-t">IR.Exp.t</a> <span>&#45;&gt;</span> <a href="../../IR/Typ/index.html#type-t">IR.Typ.t</a> <span>&#45;&gt;</span> <a href="../InferredNullability/index.html#type-t">InferredNullability.t</a> <span>&#45;&gt;</span> <a href="../IDEnv/index.html#type-t">IDEnv.t</a> <span>&#45;&gt;</span> <a href="../../IBase/LineReader/index.html#type-t">IBase.LineReader.t</a> <span>&#45;&gt;</span> <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a> <span>&#45;&gt;</span> <a href="../TypeErr/InstrRef/index.html#type-t">TypeErr.InstrRef.t</a> <span>&#45;&gt;</span> unit</code></dt><dd><p><code>expr</code> is an expression that was explicitly compared with `null`. At the same time, <code>expr</code> had <code>inferred_nullability</code> before the comparision. Check if the comparision is redundant and emit an issue, if this is the case.</p></dd></dl><dl><dt class="spec value" id="val-check_field_assignment"><a href="#val-check_field_assignment" class="anchor"></a><code><span class="keyword">val</span> check_field_assignment : <a href="../../Absint/IntraproceduralAnalysis/index.html#type-t">Absint.IntraproceduralAnalysis.t</a> <span>&#45;&gt;</span> <span>nullsafe_mode:<a href="../NullsafeMode/index.html#type-t">NullsafeMode.t</a></span> <span>&#45;&gt;</span> <span>(<a href="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a> <span>&#45;&gt;</span> <a href="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a>)</span> <span>&#45;&gt;</span> <span class="type-var">'a</span> <span>&#45;&gt;</span> <a href="../TypeErr/InstrRef/index.html#type-t">TypeErr.InstrRef.t</a> <span>&#45;&gt;</span> <span class="type-var">'b</span> <span>&#45;&gt;</span> <span>expr_rhs:<span class="type-var">'c</span></span> <span>&#45;&gt;</span> <span>field_type:<a href="../../IR/Typ/index.html#type-t">IR.Typ.t</a></span> <span>&#45;&gt;</span> <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a> <span>&#45;&gt;</span> <a href="../../IR/Fieldname/index.html#type-t">IR.Fieldname.t</a> <span>&#45;&gt;</span> <a href="../AnnotatedField/index.html#type-t">AnnotatedField.t</a> <span>&#45;&gt;</span> <span>(<span class="type-var">'a</span> <span>&#45;&gt;</span> <a href="../TypeErr/InstrRef/index.html#type-t">TypeErr.InstrRef.t</a> <span>&#45;&gt;</span> <span class="type-var">'b</span> <span>&#45;&gt;</span> <span class="type-var">'c</span> <span>&#45;&gt;</span> <span>(<a href="../../IR/Typ/index.html#type-t">IR.Typ.t</a> * <a href="../InferredNullability/index.html#type-t">InferredNullability.t</a>)</span> <span>&#45;&gt;</span> <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a> <span>&#45;&gt;</span> <span class="type-var">'d</span> * <a href="../InferredNullability/index.html#type-t">InferredNullability.t</a>)</span> <span>&#45;&gt;</span> unit</code></dt><dd><p>Check an assignment to a field.</p></dd></dl><dl><dt class="spec value" id="val-is_field_declared_as_nonnull"><a href="#val-is_field_declared_as_nonnull" class="anchor"></a><code><span class="keyword">val</span> is_field_declared_as_nonnull : <span><a href="../AnnotatedField/index.html#type-t">AnnotatedField.t</a> option</span> <span>&#45;&gt;</span> bool</code></dt><dt class="spec value" id="val-lookup_field_in_typestate"><a href="#val-lookup_field_in_typestate" class="anchor"></a><code><span class="keyword">val</span> lookup_field_in_typestate : <a href="../../IR/Procname/index.html#type-t">IR.Procname.t</a> <span>&#45;&gt;</span> <a href="../../IR/Fieldname/index.html#type-t">IR.Fieldname.t</a> <span>&#45;&gt;</span> <a href="../TypeState/index.html#type-t">TypeState.t</a> <span>&#45;&gt;</span> <span><a href="../TypeState/index.html#type-range">TypeState.range</a> option</span></code></dt><dt class="spec value" id="val-convert_predicate"><a href="#val-convert_predicate" class="anchor"></a><code><span class="keyword">val</span> convert_predicate : <span>(<a href="../TypeState/index.html#type-range">TypeState.range</a> <span>&#45;&gt;</span> bool)</span> <span>&#45;&gt;</span> <a href="../../IR/Fieldname/index.html#type-t">IR.Fieldname.t</a> <span>&#45;&gt;</span> <span>(<a href="../../IR/Procname/index.html#type-t">IR.Procname.t</a> * <a href="../TypeState/index.html#type-t">TypeState.t</a>)</span> <span>&#45;&gt;</span> bool</code></dt><dt class="spec value" id="val-predicate_holds_for_some_typestate"><a href="#val-predicate_holds_for_some_typestate" class="anchor"></a><code><span class="keyword">val</span> predicate_holds_for_some_typestate : <span><span>(<a href="../../IR/Procname/index.html#type-t">IR.Procname.t</a> * <a href="../TypeState/index.html#type-t">TypeState.t</a>)</span> list</span> <span>&#45;&gt;</span> <a href="../../IR/Fieldname/index.html#type-t">IR.Fieldname.t</a> <span>&#45;&gt;</span> <span>predicate:<span>(<a href="../TypeState/index.html#type-range">TypeState.range</a> <span>&#45;&gt;</span> bool)</span></span> <span>&#45;&gt;</span> bool</code></dt><dt class="spec value" id="val-get_nullability_upper_bound_for_typestate"><a href="#val-get_nullability_upper_bound_for_typestate" class="anchor"></a><code><span class="keyword">val</span> get_nullability_upper_bound_for_typestate : <a href="../../IR/Procname/index.html#type-t">IR.Procname.t</a> <span>&#45;&gt;</span> <a href="../../IR/Fieldname/index.html#type-t">IR.Fieldname.t</a> <span>&#45;&gt;</span> <a href="../TypeState/index.html#type-t">TypeState.t</a> <span>&#45;&gt;</span> <a href="../Nullability/index.html#type-t">Nullability.t</a></code></dt><dt class="spec value" id="val-get_nullability_upper_bound"><a href="#val-get_nullability_upper_bound" class="anchor"></a><code><span class="keyword">val</span> get_nullability_upper_bound : <a href="../../IR/Fieldname/index.html#type-t">IR.Fieldname.t</a> <span>&#45;&gt;</span> <span><span>(<a href="../../IR/Procname/index.html#type-t">IR.Procname.t</a> * <a href="../TypeState/index.html#type-t">TypeState.t</a>)</span> list</span> <span>&#45;&gt;</span> <a href="../Nullability/index.html#type-t">Nullability.t</a></code></dt><dt class="spec value" id="val-is_generated_field"><a href="#val-is_generated_field" class="anchor"></a><code><span class="keyword">val</span> is_generated_field : <a href="../../IR/Fieldname/index.html#type-t">IR.Fieldname.t</a> <span>&#45;&gt;</span> bool</code></dt><dt class="spec value" id="val-check_constructor_initialization"><a href="#val-check_constructor_initialization" class="anchor"></a><code><span class="keyword">val</span> check_constructor_initialization : <a href="../../Absint/IntraproceduralAnalysis/index.html#type-t">Absint.IntraproceduralAnalysis.t</a> <span>&#45;&gt;</span> <span>(<a href="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a> <span>&#45;&gt;</span> <a href="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a>)</span> <span>&#45;&gt;</span> <a href="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a> <span>&#45;&gt;</span> <span>nullsafe_mode:<a href="../NullsafeMode/index.html#type-t">NullsafeMode.t</a></span> <span>&#45;&gt;</span> <span>typestates_for_curr_constructor_and_all_initializer_methods:<span><span><span>(<a href="../../IR/Procname/index.html#type-t">IR.Procname.t</a> * <a href="../TypeState/index.html#type-t">TypeState.t</a>)</span> list</span> <a href="../../IStdlib/index.html#module-IStd">IStdlib.IStd</a>.Lazy.t</span></span> <span>&#45;&gt;</span> <span>typestates_for_all_constructors_incl_current:<span><span><span>(<a href="../../IR/Procname/index.html#type-t">IR.Procname.t</a> * <a href="../TypeState/index.html#type-t">TypeState.t</a>)</span> list</span> <a href="../../IStdlib/index.html#module-IStd">IStdlib.IStd</a>.Lazy.t</span></span> <span>&#45;&gt;</span> <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a> <span>&#45;&gt;</span> unit</code></dt><dd><p>Check field initialization for a given constructor</p></dd></dl><dl><dt class="spec value" id="val-check_return_not_nullable"><a href="#val-check_return_not_nullable" class="anchor"></a><code><span class="keyword">val</span> check_return_not_nullable : <a href="../../Absint/IntraproceduralAnalysis/index.html#type-t">Absint.IntraproceduralAnalysis.t</a> <span>&#45;&gt;</span> <span>nullsafe_mode:<a href="../NullsafeMode/index.html#type-t">NullsafeMode.t</a></span> <span>&#45;&gt;</span> <span>(<a href="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a> <span>&#45;&gt;</span> <a href="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a>)</span> <span>&#45;&gt;</span> <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a> <span>&#45;&gt;</span> <a href="../AnnotatedSignature/index.html#type-ret_signature">AnnotatedSignature.ret_signature</a> <span>&#45;&gt;</span> <a href="../InferredNullability/index.html#type-t">InferredNullability.t</a> <span>&#45;&gt;</span> unit</code></dt><dt class="spec value" id="val-check_return_overrannotated"><a href="#val-check_return_overrannotated" class="anchor"></a><code><span class="keyword">val</span> check_return_overrannotated : <a href="../../Absint/IntraproceduralAnalysis/index.html#type-t">Absint.IntraproceduralAnalysis.t</a> <span>&#45;&gt;</span> <span>(<a href="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a> <span>&#45;&gt;</span> <a href="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a>)</span> <span>&#45;&gt;</span> <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a> <span>&#45;&gt;</span> <span>nullsafe_mode:<a href="../NullsafeMode/index.html#type-t">NullsafeMode.t</a></span> <span>&#45;&gt;</span> <a href="../AnnotatedSignature/index.html#type-ret_signature">AnnotatedSignature.ret_signature</a> <span>&#45;&gt;</span> <a href="../InferredNullability/index.html#type-t">InferredNullability.t</a> <span>&#45;&gt;</span> unit</code></dt><dt class="spec value" id="val-check_return_annotation"><a href="#val-check_return_annotation" class="anchor"></a><code><span class="keyword">val</span> check_return_annotation : <a href="../../Absint/IntraproceduralAnalysis/index.html#type-t">Absint.IntraproceduralAnalysis.t</a> <span>&#45;&gt;</span> <span>(<a href="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a> <span>&#45;&gt;</span> <a href="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a>)</span> <span>&#45;&gt;</span> <span><span>(<span class="type-var">'a</span> * <a href="../InferredNullability/index.html#type-t">InferredNullability.t</a>)</span> option</span> <span>&#45;&gt;</span> <a href="../AnnotatedSignature/index.html#type-t">AnnotatedSignature.t</a> <span>&#45;&gt;</span> bool <span>&#45;&gt;</span> <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a> <span>&#45;&gt;</span> unit</code></dt><dd><p>Check the annotations when returning from a method.</p></dd></dl><dl><dt class="spec value" id="val-check_call_receiver"><a href="#val-check_call_receiver" class="anchor"></a><code><span class="keyword">val</span> check_call_receiver : <a href="../../Absint/IntraproceduralAnalysis/index.html#type-t">Absint.IntraproceduralAnalysis.t</a> <span>&#45;&gt;</span> <span>nullsafe_mode:<a href="../NullsafeMode/index.html#type-t">NullsafeMode.t</a></span> <span>&#45;&gt;</span> <span>(<a href="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a> <span>&#45;&gt;</span> <a href="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a>)</span> <span>&#45;&gt;</span> <a href="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a> <span>&#45;&gt;</span> <span class="type-var">'a</span> <span>&#45;&gt;</span> <span><span>(<span>(<a href="../../IR/Exp/index.html#type-t">IR.Exp.t</a> * <span class="type-var">'b</span>)</span> * <span class="type-var">'c</span>)</span> list</span> <span>&#45;&gt;</span> <a href="../../IR/Procname/index.html#type-t">IR.Procname.t</a> <span>&#45;&gt;</span> <a href="../TypeErr/InstrRef/index.html#type-t">TypeErr.InstrRef.t</a> <span>&#45;&gt;</span> <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a> <span>&#45;&gt;</span> <span>(<a href="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a> <span>&#45;&gt;</span> <a href="../TypeErr/InstrRef/index.html#type-t">TypeErr.InstrRef.t</a> <span>&#45;&gt;</span> <span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span> <span>&#45;&gt;</span> <span>(<span class="type-var">'c</span> * <a href="../InferredNullability/index.html#type-t">InferredNullability.t</a>)</span> <span>&#45;&gt;</span> <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a> <span>&#45;&gt;</span> <span class="type-var">'d</span> * <a href="../InferredNullability/index.html#type-t">InferredNullability.t</a>)</span> <span>&#45;&gt;</span> unit</code></dt><dd><p>Check the receiver of a virtual call.</p></dd></dl><dl><dt class="spec type" id="type-resolved_param"><a href="#type-resolved_param" class="anchor"></a><code><span class="keyword">type</span> resolved_param</code><code> = </code><code>{</code><table class="record"><tr id="type-resolved_param.num" class="anchored"><td class="def field"><a href="#type-resolved_param.num" class="anchor"></a><code>num : int;</code></td></tr><tr id="type-resolved_param.formal" class="anchored"><td class="def field"><a href="#type-resolved_param.formal" class="anchor"></a><code>formal : <a href="../AnnotatedSignature/index.html#type-param_signature">AnnotatedSignature.param_signature</a>;</code></td></tr><tr id="type-resolved_param.actual" class="anchored"><td class="def field"><a href="#type-resolved_param.actual" class="anchor"></a><code>actual : <a href="../../IR/Exp/index.html#type-t">IR.Exp.t</a> * <a href="../InferredNullability/index.html#type-t">InferredNullability.t</a>;</code></td></tr><tr id="type-resolved_param.is_formal_propagates_nullable" class="anchored"><td class="def field"><a href="#type-resolved_param.is_formal_propagates_nullable" class="anchor"></a><code>is_formal_propagates_nullable : bool;</code></td></tr></table><code>}</code></dt></dl><dl><dt class="spec value" id="val-check_call_parameters"><a href="#val-check_call_parameters" class="anchor"></a><code><span class="keyword">val</span> check_call_parameters : <a href="../../Absint/IntraproceduralAnalysis/index.html#type-t">Absint.IntraproceduralAnalysis.t</a> <span>&#45;&gt;</span> <span>nullsafe_mode:<a href="../NullsafeMode/index.html#type-t">NullsafeMode.t</a></span> <span>&#45;&gt;</span> <span>callee_annotated_signature:<a href="../AnnotatedSignature/index.html#type-t">AnnotatedSignature.t</a></span> <span>&#45;&gt;</span> <span>(<a href="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a> <span>&#45;&gt;</span> <a href="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a>)</span> <span>&#45;&gt;</span> <a href="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a> <span>&#45;&gt;</span> <a href="../../IR/ProcAttributes/index.html#type-t">IR.ProcAttributes.t</a> <span>&#45;&gt;</span> <span><a href="index.html#type-resolved_param">resolved_param</a> list</span> <span>&#45;&gt;</span> <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a> <span>&#45;&gt;</span> <a href="../TypeErr/InstrRef/index.html#type-t">TypeErr.InstrRef.t</a> <span>&#45;&gt;</span> unit</code></dt><dd><p>Check the parameters of a call.</p></dd></dl><dl><dt class="spec value" id="val-check_inheritance_rule_for_return"><a href="#val-check_inheritance_rule_for_return" class="anchor"></a><code><span class="keyword">val</span> check_inheritance_rule_for_return : <a href="../../Absint/IntraproceduralAnalysis/index.html#type-t">Absint.IntraproceduralAnalysis.t</a> <span>&#45;&gt;</span> <span>(<a href="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a> <span>&#45;&gt;</span> <a href="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a>)</span> <span>&#45;&gt;</span> <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a> <span>&#45;&gt;</span> <span>nullsafe_mode:<a href="../NullsafeMode/index.html#type-t">NullsafeMode.t</a></span> <span>&#45;&gt;</span> <span>base_proc_name:<a href="../../IR/Procname/index.html#type-t">IR.Procname.t</a></span> <span>&#45;&gt;</span> <span>base_nullability:<a href="../Nullability/index.html#type-t">Nullability.t</a></span> <span>&#45;&gt;</span> <span>overridden_nullability:<a href="../Nullability/index.html#type-t">Nullability.t</a></span> <span>&#45;&gt;</span> unit</code></dt><dt class="spec value" id="val-check_inheritance_rule_for_param"><a href="#val-check_inheritance_rule_for_param" class="anchor"></a><code><span class="keyword">val</span> check_inheritance_rule_for_param : <a href="../../Absint/IntraproceduralAnalysis/index.html#type-t">Absint.IntraproceduralAnalysis.t</a> <span>&#45;&gt;</span> <span>(<a href="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a> <span>&#45;&gt;</span> <a href="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a>)</span> <span>&#45;&gt;</span> <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a> <span>&#45;&gt;</span> <span>nullsafe_mode:<a href="../NullsafeMode/index.html#type-t">NullsafeMode.t</a></span> <span>&#45;&gt;</span> <span>overridden_param_name:<a href="../../IR/Mangled/index.html#type-t">IR.Mangled.t</a></span> <span>&#45;&gt;</span> <span>base_proc_name:<a href="../../IR/Procname/index.html#type-t">IR.Procname.t</a></span> <span>&#45;&gt;</span> <span>param_position:int</span> <span>&#45;&gt;</span> <span>base_nullability:<a href="../Nullability/index.html#type-t">Nullability.t</a></span> <span>&#45;&gt;</span> <span>overridden_nullability:<a href="../Nullability/index.html#type-t">Nullability.t</a></span> <span>&#45;&gt;</span> unit</code></dt><dt class="spec value" id="val-check_inheritance_rule_for_params"><a href="#val-check_inheritance_rule_for_params" class="anchor"></a><code><span class="keyword">val</span> check_inheritance_rule_for_params : <a href="../../Absint/IntraproceduralAnalysis/index.html#type-t">Absint.IntraproceduralAnalysis.t</a> <span>&#45;&gt;</span> <span>(<a href="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a> <span>&#45;&gt;</span> <a href="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a>)</span> <span>&#45;&gt;</span> <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a> <span>&#45;&gt;</span> <span>nullsafe_mode:<a href="../NullsafeMode/index.html#type-t">NullsafeMode.t</a></span> <span>&#45;&gt;</span> <span>base_proc_name:<a href="../../IR/Procname/index.html#type-t">IR.Procname.t</a></span> <span>&#45;&gt;</span> <span>base_signature:<a href="../AnnotatedSignature/index.html#type-t">AnnotatedSignature.t</a></span> <span>&#45;&gt;</span> <span>overridden_signature:<a href="../AnnotatedSignature/index.html#type-t">AnnotatedSignature.t</a></span> <span>&#45;&gt;</span> unit</code></dt><dt class="spec value" id="val-check_inheritance_rule_for_signature"><a href="#val-check_inheritance_rule_for_signature" class="anchor"></a><code><span class="keyword">val</span> check_inheritance_rule_for_signature : <a href="../../Absint/IntraproceduralAnalysis/index.html#type-t">Absint.IntraproceduralAnalysis.t</a> <span>&#45;&gt;</span> <span>(<a href="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a> <span>&#45;&gt;</span> <a href="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a>)</span> <span>&#45;&gt;</span> <a href="../../IBase/Location/index.html#type-t">IBase.Location.t</a> <span>&#45;&gt;</span> <span>nullsafe_mode:<a href="../NullsafeMode/index.html#type-t">NullsafeMode.t</a></span> <span>&#45;&gt;</span> <span>base_proc_name:<a href="../../IR/Procname/index.html#type-t">IR.Procname.t</a></span> <span>&#45;&gt;</span> <span>base_signature:<a href="../AnnotatedSignature/index.html#type-t">AnnotatedSignature.t</a></span> <span>&#45;&gt;</span> <span>overridden_signature:<a href="../AnnotatedSignature/index.html#type-t">AnnotatedSignature.t</a></span> <span>&#45;&gt;</span> unit</code></dt><dd><p>Check both params and return values for complying for co- and contravariance</p></dd></dl><dl><dt class="spec value" id="val-check_overridden_annotations"><a href="#val-check_overridden_annotations" class="anchor"></a><code><span class="keyword">val</span> check_overridden_annotations : <a href="../../Absint/IntraproceduralAnalysis/index.html#type-t">Absint.IntraproceduralAnalysis.t</a> <span>&#45;&gt;</span> <span>(<a href="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a> <span>&#45;&gt;</span> <a href="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a>)</span> <span>&#45;&gt;</span> <a href="../AnnotatedSignature/index.html#type-t">AnnotatedSignature.t</a> <span>&#45;&gt;</span> unit</code></dt><dd><p>Checks if the annotations are consistent with the derived classes and with the implemented interfaces</p></dd></dl></div></body></html>