Part of the combined points-to, call-graph and type-inference library.
The main relation
points_to(node, context, object, cls, origin) relates a control flow node
to the possible objects it points-to the inferred types of those objects and the ‘origin’
of those objects. The ‘origin’ is the point in source code that the object can be traced
The predicates provided are not intended to be used directly (although they are available to the advanced user), but are exposed in the user API as methods on key classes.
For example, the most important predicate in the points-to relation is:
predicate PointsTo::points_to(ControlFlowNode f, PointsToContext ctx, Object value, ClassObject cls, ControlFlowNode origin)
f is the control flow node representing something that might hold a value.
ctx is the context in which
value and may be “general” or from a specific call-site.
value is a static approximation to a value, such as a number, a class, or an object instantiation.
cls is the class of this value if known, or
theUnknownType() which is an internal
ClassObject and should not be exposed to the general QL user.
origin is the point in the source from where
value originates and is useful when presenting query results.
PointsTo::points_to relation is exposed at the user API level as
ControlFlowNode.refersTo(Context context, Object value, ClassObject cls, ControlFlowNode origin)