This is an implementation of AbstractJimpleBasedICFG that computes the ICFG on-the-fly. In other words,
it can be used without pre-computing a call graph. Instead this implementation resolves calls through Class
Hierarchy Analysis (CHA), as implemented through FastHierarchy. The CHA is supported by LocalMustNotAliasAnalysis, which
is used to determine cases where the concrete type of an object at an InvokeVirtual or InvokeInterface callsite is known.
In these cases the call can be resolved concretely, i.e., to a single target.
To be sound, for InvokeInterface calls that cannot be resolved concretely, OnTheFlyJimpleBasedICFG requires that
all classes on the classpath be loaded at least to signatures. This must be done before the FastHierarchy is computed such
that the hierarchy is intact. Clients should call
loadAllClassesOnClassPathToSignatures()
to load all required classes
to this level.