Package-level declarations

Types

Link copied to clipboard
sealed interface CallingContext
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
class ContextSensitiveDataflow(start: Node, end: Node, var granularity: Granularity = default(), val callingContext: CallingContext) : Dataflow

This edge class defines a flow of data between start and end. The flow must have a callingContext which allows for a context-sensitive dataflow analysis. This edge can also have a certain granularity.

Link copied to clipboard
class ControlDependence(start: Node, end: Node, var branches: Set<Boolean> = setOf()) : Edge<Node>

An edge in a Control Dependence Graph (CDG). Denotes that the start node exercises control dependence on the end node. See ControlDependenceGraphPass.

Link copied to clipboard

A container of ControlDependence edges. NodeType is necessary because of the Neo4J OGM.

Link copied to clipboard
open class Dataflow(start: Node, end: Node, var granularity: Granularity = default()) : Edge<Node>

This edge class defines a flow of data between start and end. The flow can have a certain granularity.

Link copied to clipboard
class Dataflows<T : Node>(thisRef: Node, var mirrorProperty: KProperty<MutableCollection<Dataflow>>, outgoing: Boolean) : EdgeSet<Node, Dataflow> , MirroredEdgeCollection<Node, Dataflow>

This class represents a container of Dataflow property edges in a thisRef.

Link copied to clipboard

The types of dependences that might be represented in the CPG

Link copied to clipboard
class EvaluationOrder(start: Node, end: Node, var unreachable: Boolean = false, var branch: Boolean? = null) : Edge<Node>

An edge in our Evaluation Order Graph (EOG). It considers the order in which our AST statements would be "evaluated" (e.g. by a compiler or interpreter). See EvaluationOrderGraphPass for more details.

Link copied to clipboard

Holds a container of EvaluationOrder edges. The canonical version of this lives in Node.prevEOGEdges / Node.nextEOGEdges and is populated by the EvaluationOrderGraphPass.

Link copied to clipboard

This dataflow granularity is the default. The "whole" object is flowing from Dataflow.start to Dataflow.end.

Link copied to clipboard
sealed interface Granularity

The granularity of the data-flow, e.g., whether the flow contains the whole object, or just a part of it, for example a record (class/struct) member.

Link copied to clipboard
class Invoke(start: Node, end: FunctionDeclaration, var dynamicInvoke: Boolean = false) : Edge<FunctionDeclaration>

This edge class denotes the invocation of a FunctionDeclaration by a CallExpression.

Link copied to clipboard

A container for Usage edges. NodeType is necessary because of the Neo4J OGM.

Link copied to clipboard

This dataflow granularity denotes that not the "whole" object is flowing from Dataflow.start to Dataflow.end but only parts of it. Common examples include MemberExpression nodes, where we model a dataflow to the base, but only partially scoped to a particular field.

Link copied to clipboard

A container of Edge edges that act as a program dependence graph (PDG). The canonical version of this lives in Node.prevPDGEdges / Node.nextPDGEdges and is populated by the ProgramDependenceGraphPass.

Link copied to clipboard
class Usage(start: Node, end: Reference, var access: AccessValues? = null) : Edge<Reference>

This edge class denotes the usage of a ValueDeclaration in a Reference.

Link copied to clipboard

A container for Usage edges. NodeType is necessary because of the Neo4J OGM.

Functions

Link copied to clipboard

Creates a new default Granularity. Currently, this defaults to FullDataflowGranularity.

Link copied to clipboard
Link copied to clipboard

Creates a new PartialDataflowGranularity. The target is the Declaration that is affected by the partial dataflow. Examples include a FieldDeclaration for a MemberExpression or a VariableDeclaration for a TupleDeclaration.