Attributes
- Companion
- class
- Source
- ReachabilityAnalysis.scala
- Graph
-
- Supertypes
-
class Objecttrait Matchableclass Any
- Self type
-
CallGraphAnalysis.type
Members list
Type members
Classlikes
Attributes
- Source
- ReachabilityAnalysis.scala
- Supertypes
-
trait Serializabletrait Serializabletrait Producttrait Equalstrait Nodeclass Objecttrait Matchableclass AnyShow all
Attributes
- Source
- ReachabilityAnalysis.scala
- Supertypes
-
trait Serializabletrait Serializabletrait Producttrait Equalstrait Nodeclass Objecttrait Matchableclass AnyShow all
Attributes
- Source
- ReachabilityAnalysis.scala
- Supertypes
-
trait Serializabletrait Serializabletrait Producttrait Equalstrait Nodeclass Objecttrait Matchableclass AnyShow all
Represents the three types of nodes in our call graph. These are kept heterogeneous because flattening them out into a homogenous graph of MethodDef -> MethodDef edges results in a lot of duplication that bloats the size of the graph non-linearly with the size of the program
Represents the three types of nodes in our call graph. These are kept heterogeneous because flattening them out into a homogenous graph of MethodDef -> MethodDef edges results in a lot of duplication that bloats the size of the graph non-linearly with the size of the program
Attributes
- Source
- ReachabilityAnalysis.scala
- Supertypes
-
class Objecttrait Matchableclass Any
- Known subtypes
Value members
Concrete methods
Attributes
- Source
- ReachabilityAnalysis.scala
Computes the minimal spanning forest of the that covers the nodes in the call graph whose transitive call graph hashes has changed since the last run, rendered as a JSON dictionary tree. This provides a great "debug view" that lets you easily Cmd-F to find a particular node and then trace it up the JSON hierarchy to figure out what upstream node was the root cause of the change in the callgraph.
Computes the minimal spanning forest of the that covers the nodes in the call graph whose transitive call graph hashes has changed since the last run, rendered as a JSON dictionary tree. This provides a great "debug view" that lets you easily Cmd-F to find a particular node and then trace it up the JSON hierarchy to figure out what upstream node was the root cause of the change in the callgraph.
There are typically multiple possible spanning forests for a given graph; one is chosen arbitrarily. This is usually fine, since when debugging you typically are investigating why there's a path to a node at all where none should exist, rather than trying to fully analyse all possible paths
Attributes
- Source
- ReachabilityAnalysis.scala
Summarizes the transitive closure of the given graph, using the given computeOutputValue and reduce functions to return a single value of T.
Summarizes the transitive closure of the given graph, using the given computeOutputValue and reduce functions to return a single value of T.
This is done in topological order, in order to allow us to memo-ize the values computed for upstream groups when processing downstream methods, avoiding the need to repeatedly re-compute them. Each Strongly Connected Component is processed together and assigned the same final value, since they all have the exact same transitive closure
Attributes
- Source
- ReachabilityAnalysis.scala
Implicits
Implicits
Attributes
- Source
- ReachabilityAnalysis.scala