Skip to content

Add CFA representations based on Guava's Network

Philipp Wendler requested to merge cfa-network into trunk

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.

Edited by Valentin Port

Merge request reports