abstract class XTypeRecovery[ComputationalUnit <: AstNode](cpg: Cpg) extends CpgPass
Based on a flow-insensitive symbol-table-style approach. This pass aims to be fast and deterministic and does not
try to converge to some fixed point. This will help recover:
Imported call signatures from external
dependencies
Dynamic type hints for mutable variables in a computational unit.
The algorithm flows roughly as follows:
Scan for method signatures of methods for each compilation unit,
either by internally defined methods or by reading import signatures. This includes looking for aliases, e.g. import
foo as bar.
TODO: While performing the above, note field/member assignments in a symbol
table.
(Optionally) Prune these method signatures by checking their validity against the CPG.
Visit
assignments to populate where variables are assigned a value to extrapolate its type. Store these values in a local
symbol table.
Find instances of where these variables are used and update their type information.
If
this variable is the receiver of a call, make sure to set the type of the call accordingly.
The symbol tables use the SymbolTable class to track possible type information.
Attributes
ComputationalUnit
the AstNode type used to represent a computational unit of the language.
Name of the pass. By default it is inferred from the name of the class, override if needed.
Name of the pass. By default it is inferred from the name of the class, override if needed.
Attributes
Inherited from:
CpgPassBase
final override def runOnPart(builder: DiffGraphBuilder, part: AnyRef): Unit
Attributes
Definition Classes
CpgPass -> NewStyleCpgPassBase
Inherited from:
CpgPass
override def runWithBuilder(externalBuilder: DiffGraphBuilder): Int
Runs the cpg pass, adding changes to the passed builder. Use with caution -- API is unstable. Returns max(nParts,
1), where nParts is either the number of parallel parts, or the number of iterarator elements in case of legacy
passes. Includes init() and finish() logic.
Runs the cpg pass, adding changes to the passed builder. Use with caution -- API is unstable. Returns max(nParts,
1), where nParts is either the number of parallel parts, or the number of iterarator elements in case of legacy
passes. Includes init() and finish() logic.
Wraps runWithBuilder with logging, and swallows raised exceptions. Use with caution -- API is unstable. A return
value of -1 indicates failure, otherwise the return value of runWithBuilder is passed through.
Wraps runWithBuilder with logging, and swallows raised exceptions. Use with caution -- API is unstable. A return
value of -1 indicates failure, otherwise the return value of runWithBuilder is passed through.