/** * For each call graph node, what heap locations (as determined by a heap model) may it read, <b> NOT </b> including its callees * transitively */ private Map<CGNode, Collection<PointerKey>> scanForRef(CallGraph cg, final PointerAnalysis<T> pa, final HeapExclusions heapExclude) { return CallGraphTransitiveClosure.collectNodeResults(cg, n -> scanNodeForRef(n, pa, heapExclude)); }
/** * Compute the lexical variables possibly read by each {@link CGNode} and its * transitive callees. A lexical variable is represented as a pair (C,N), * where C is the defining {@link CGNode} and N is the {@link String} name. */ public Map<CGNode, OrdinalSet<Pair<CGNode, String>>> computeLexicalRef() { Map<CGNode, Collection<Pair<CGNode, String>>> scan = CallGraphTransitiveClosure.collectNodeResults(cg, this::scanNodeForLexReads); return CallGraphTransitiveClosure.transitiveClosure(cg, scan); }
/** * Compute the lexical variables possibly read by each {@link CGNode} and its * transitive callees. A lexical variable is represented as a pair (C,N), * where C is the defining {@link CGNode} and N is the {@link String} name. */ public Map<CGNode, OrdinalSet<Pair<CGNode, String>>> computeLexicalRef() { Map<CGNode, Collection<Pair<CGNode, String>>> scan = CallGraphTransitiveClosure.collectNodeResults(cg, this::scanNodeForLexReads); return CallGraphTransitiveClosure.transitiveClosure(cg, scan); }
/** * Compute the lexical variables possibly modified by each {@link CGNode} and * its transitive callees. A lexical variable is represented as a pair (C,N), * where C is the defining {@link CGNode} and N is the {@link String} name. */ public Map<CGNode, OrdinalSet<Pair<CGNode, String>>> computeLexicalMod() { Map<CGNode, Collection<Pair<CGNode, String>>> scan = CallGraphTransitiveClosure.collectNodeResults(cg, this::scanNodeForLexWrites); return CallGraphTransitiveClosure.transitiveClosure(cg, scan); }
/** * For each call graph node, what heap locations (as determined by a heap model) may it write, <b> NOT </b> including its * callees transitively */ private Map<CGNode, Collection<PointerKey>> scanForMod(CallGraph cg, final PointerAnalysis<T> pa, final HeapExclusions heapExclude) { return CallGraphTransitiveClosure.collectNodeResults(cg, n -> scanNodeForMod(n, pa, heapExclude)); }
/** * Compute the lexical variables possibly modified by each {@link CGNode} and * its transitive callees. A lexical variable is represented as a pair (C,N), * where C is the defining {@link CGNode} and N is the {@link String} name. */ public Map<CGNode, OrdinalSet<Pair<CGNode, String>>> computeLexicalMod() { Map<CGNode, Collection<Pair<CGNode, String>>> scan = CallGraphTransitiveClosure.collectNodeResults(cg, this::scanNodeForLexWrites); return CallGraphTransitiveClosure.transitiveClosure(cg, scan); }
/** * For each call graph node, what heap locations (as determined by a heap model) may it write, <b> NOT </b> including its * callees transitively */ private Map<CGNode, Collection<PointerKey>> scanForMod(CallGraph cg, final PointerAnalysis<T> pa, final HeapExclusions heapExclude) { return CallGraphTransitiveClosure.collectNodeResults(cg, n -> scanNodeForMod(n, pa, heapExclude)); }
/** * For each call graph node, what heap locations (as determined by a heap model) may it read, <b> NOT </b> including its callees * transitively */ private Map<CGNode, Collection<PointerKey>> scanForRef(CallGraph cg, final PointerAnalysis<T> pa, final HeapExclusions heapExclude) { return CallGraphTransitiveClosure.collectNodeResults(cg, n -> scanNodeForRef(n, pa, heapExclude)); }