Add CFA representations based on Guava's Network
This MR adds the new cfa.graph
package and multiple interfaces and classes. These are the most important ones:
cfa.graph
package: This package contains interfaces and implementations for representing CFAs as Guava graphs. This allows us to write more general graph algorithms that don't depend on any CFA details. Additionally, we can take full advantage of Guava's graph library (e.g., to transpose a CFA or use iteration orders provided by Guava).
cfa.graph.CfaNetwork
interface: Implementations of this interface represent a CFA as a Guava Network
. The key idea is that all connections of a CFA are fully defined by a single CfaNetwork
instance instead of its individual elements (i.e., its nodes and edges). There are static factory methods for, e.g., creating a CfaNetwork
for an existing CFA
or creating a CfaNetwork
for a single function.
We decided to split MR !80 (merged) into multiple parts. This is one of those parts, but it can be reviewed separately.