Class CrossLanguageCallGraph
java.lang.Object
com.ibm.wala.util.graph.AbstractGraph<CGNode>
com.ibm.wala.util.graph.AbstractNumberedGraph<CGNode>
com.ibm.wala.ipa.callgraph.impl.BasicCallGraph<SSAContextInterpreter>
com.ibm.wala.ipa.callgraph.impl.ExplicitCallGraph
com.ibm.wala.cast.ipa.callgraph.AstCallGraph
com.ibm.wala.cast.ipa.callgraph.CrossLanguageCallGraph
- All Implemented Interfaces:
CallGraph, BytecodeConstants, EdgeManager<CGNode>, Graph<CGNode>, NodeManager<CGNode>, NumberedEdgeManager<CGNode>, NumberedGraph<CGNode>, NumberedNodeManager<CGNode>, Iterable<CGNode>
A CallGraph implementation adapted to work for graphs that contain code entities from multiple
languages, and hence multiple specialized forms of IR. The root node delegates to one of several
language-specific root nodes, allowing each language to use its own specialized IR constructs for
entry points.
- Author:
- Julian Dolby (dolby@us.ibm.com)
-
Nested Class Summary
Nested ClassesNested classes/interfaces inherited from class AstCallGraph
AstCallGraph.AstCGNode, AstCallGraph.AstFakeRoot, AstCallGraph.ScriptFakeRootModifier and TypeClassDescriptionclassstatic classstatic classNested classes/interfaces inherited from class ExplicitCallGraph
ExplicitCallGraph.ExplicitEdgeManager, ExplicitCallGraph.ExplicitNodeModifier and TypeClassDescriptionprotected classclassNested classes/interfaces inherited from class BasicCallGraph
BasicCallGraph.Key, BasicCallGraph.NodeImplModifier and TypeClassDescriptionprotected static final classstatic classA class that represents the a normal node in a call graph. -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic ClassLoaderReferencestatic TypeReferencestatic MethodReferenceFields inherited from class ExplicitCallGraph
cha, optionsFields inherited from class BasicCallGraph
mr2NodesModifier and TypeFieldDescriptionprotected final Map<MethodReference, Set<CGNode>> A mapping from MethodReference to Set of nodes that represent this methodReference.Fields inherited from interface BytecodeConstants
JBC_aaload, JBC_aastore, JBC_aconst_null, JBC_aload, JBC_aload_0, JBC_aload_1, JBC_aload_2, JBC_aload_3, JBC_anewarray, JBC_areturn, JBC_arraylength, JBC_astore, JBC_astore_0, JBC_astore_1, JBC_astore_2, JBC_astore_3, JBC_athrow, JBC_baload, JBC_bastore, JBC_bipush, JBC_caload, JBC_castore, JBC_checkcast, JBC_d2f, JBC_d2i, JBC_d2l, JBC_dadd, JBC_daload, JBC_dastore, JBC_dcmpg, JBC_dcmpl, JBC_dconst_0, JBC_dconst_1, JBC_ddiv, JBC_dload, JBC_dload_0, JBC_dload_1, JBC_dload_2, JBC_dload_3, JBC_dmul, JBC_dneg, JBC_drem, JBC_dreturn, JBC_dstore, JBC_dstore_0, JBC_dstore_1, JBC_dstore_2, JBC_dstore_3, JBC_dsub, JBC_dup, JBC_dup_x1, JBC_dup_x2, JBC_dup2, JBC_dup2_x1, JBC_dup2_x2, JBC_f2d, JBC_f2i, JBC_f2l, JBC_fadd, JBC_faload, JBC_fastore, JBC_fcmpg, JBC_fcmpl, JBC_fconst_0, JBC_fconst_1, JBC_fconst_2, JBC_fdiv, JBC_fload, JBC_fload_0, JBC_fload_1, JBC_fload_2, JBC_fload_3, JBC_fmul, JBC_fneg, JBC_frem, JBC_freturn, JBC_fstore, JBC_fstore_0, JBC_fstore_1, JBC_fstore_2, JBC_fstore_3, JBC_fsub, JBC_getfield, JBC_getstatic, JBC_goto, JBC_goto_w, JBC_i2d, JBC_i2f, JBC_i2l, JBC_iadd, JBC_iaload, JBC_iand, JBC_iastore, JBC_iconst_0, JBC_iconst_1, JBC_iconst_2, JBC_iconst_3, JBC_iconst_4, JBC_iconst_5, JBC_iconst_m1, JBC_idiv, JBC_if_acmpeq, JBC_if_acmpne, JBC_if_icmpeq, JBC_if_icmpge, JBC_if_icmpgt, JBC_if_icmple, JBC_if_icmplt, JBC_if_icmpne, JBC_ifeq, JBC_ifge, JBC_ifgt, JBC_ifle, JBC_iflt, JBC_ifne, JBC_ifnonnull, JBC_ifnull, JBC_iinc, JBC_iload, JBC_iload_0, JBC_iload_1, JBC_iload_2, JBC_iload_3, JBC_impdep1, JBC_impdep2, JBC_imul, JBC_ineg, JBC_instanceof, JBC_int2byte, JBC_int2char, JBC_int2short, JBC_invokeinterface, JBC_invokespecial, JBC_invokestatic, JBC_invokevirtual, JBC_ior, JBC_irem, JBC_ireturn, JBC_ishl, JBC_ishr, JBC_istore, JBC_istore_0, JBC_istore_1, JBC_istore_2, JBC_istore_3, JBC_isub, JBC_iushr, JBC_ixor, JBC_jsr, JBC_jsr_w, JBC_l2d, JBC_l2f, JBC_l2i, JBC_ladd, JBC_laload, JBC_land, JBC_lastore, JBC_lcmp, JBC_lconst_0, JBC_lconst_1, JBC_ldc, JBC_ldc_w, JBC_ldc2_w, JBC_ldiv, JBC_length, JBC_lload, JBC_lload_0, JBC_lload_1, JBC_lload_2, JBC_lload_3, JBC_lmul, JBC_lneg, JBC_lookupswitch, JBC_lor, JBC_lrem, JBC_lreturn, JBC_lshl, JBC_lshr, JBC_lstore, JBC_lstore_0, JBC_lstore_1, JBC_lstore_2, JBC_lstore_3, JBC_lsub, JBC_lushr, JBC_lxor, JBC_monitorenter, JBC_monitorexit, JBC_multianewarray, JBC_name, JBC_new, JBC_newarray, JBC_nop, JBC_pop, JBC_pop2, JBC_putfield, JBC_putstatic, JBC_ret, JBC_return, JBC_saload, JBC_sastore, JBC_sipush, JBC_swap, JBC_tableswitch, JBC_wide, JBC_xxxunusedxxxModifier and TypeFieldDescriptionstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final byte[]static final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final String[]Bytecode names (for debugging/printing)static final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final int -
Constructor Summary
ConstructorsConstructorDescriptionCrossLanguageCallGraph(TargetLanguageSelector<AbstractRootMethod, CrossLanguageCallGraph> roots, IMethod fakeRootClass2, AnalysisOptions options, IAnalysisCacheView cache) -
Method Summary
Modifier and TypeMethodDescriptiongetLanguageRoot(Atom language) protected CGNodesubclasses may wish to override!Methods inherited from class AstCallGraph
makeNodeModifier and TypeMethodDescriptionprotected ExplicitCallGraph.ExplicitNodesubclasses may wish to override!Methods inherited from class ExplicitCallGraph
findOrCreateNode, getAnalysisCache, getClassHierarchy, getEdgeManager, getNumberOfTargets, getPossibleSites, getPossibleTargetNumbers, getPossibleTargets, makeEdgeManger, makeFakeWorldClinitNodeModifier and TypeMethodDescriptionfindOrCreateNode(IMethod method, Context context) Use with extreme care.intgetNumberOfTargets(CGNode node, CallSiteReference site) getPossibleSites(CGNode src, CGNode target) getPossibleTargetNumbers(CGNode node, CallSiteReference site) getPossibleTargets(CGNode node, CallSiteReference site) Return the set of CGNodes that represent possible targets of a particular call site from a particular nodeprotected ExplicitCallGraph.ExplicitEdgeManagerprotected CGNodesubclasses may wish to override!Methods inherited from class BasicCallGraph
containsNode, getEntrypointNodes, getFakeRootNode, getFakeWorldClinitNode, getInterpreter, getNode, getNode, getNodeManager, getNodes, getNumberOfNodes, init, iterator, nodeToString, registerEntrypoint, registerNode, removeNodeAndEdges, setInterpreter, summarizeByPackage, toStringModifier and TypeMethodDescriptionbooleanThis implementation is necessary because the underlying SparseNumberedGraph may not support node membership tests.Note: not all successors of the root node are entrypointsReturn the (fake) interproceduralroot nodeof the call graph.protected SSAContextInterpretergetInterpreter(CGNode node) If you want to get all the nodes corresponding to a particular method, regardless of context, then usegetNodesprotected CGNodeprotected NumberedNodeManager<CGNode> intWe override this since this class supports remove() on nodes, but the superclass doesn't.voidinit()iterator()We override this since this class supports remove() on nodes, but the superclass doesn't.static StringnodeToString(CallGraph CG, CGNode n) voidregisterEntrypoint(CGNode node) record that a node is an entrypointprotected voidvoidremove a node and all its incident edgesvoidsetInterpreter(SSAContextInterpreter interpreter) voidtoString()Methods inherited from class AbstractNumberedGraph
getMaxNumber, getNode, getNumber, getPredNodeNumbers, getSuccNodeNumbers, iterateNodesModifier and TypeMethodDescriptionintgetNode(int number) intgetPredNodeNumbers(CGNode node) getSuccNodeNumbers(CGNode node) Methods inherited from class AbstractGraph
addEdge, addNode, edgeString, getPredNodeCount, getPredNodes, getSuccNodeCount, getSuccNodes, hasEdge, nodeString, removeAllIncidentEdges, removeEdge, removeIncomingEdges, removeNode, removeOutgoingEdges, streamModifier and TypeMethodDescriptionvoidvoidadd a node to this graphprotected StringedgeString(CGNode from, CGNode to) intReturn the number ofimmediate predecessornodes of nReturn anIteratorover the immediate predecessor nodes of nintReturn the number ofimmediate successornodes of this Node in the GraphReturn an Iterator over the immediate successor nodes of nbooleanprotected StringnodeString(CGNode n, boolean forEdge) voidremoveAllIncidentEdges(CGNode node) voidremoveEdge(CGNode src, CGNode dst) voidremoveIncomingEdges(CGNode node) voidremoveNode(CGNode n) remove a node from this graphvoidremoveOutgoingEdges(CGNode node) stream()Methods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface Iterable
forEach, spliterator
-
Field Details
-
crossCoreLoader
-
fakeRootClass
-
rootMethod
-
-
Constructor Details
-
CrossLanguageCallGraph
public CrossLanguageCallGraph(TargetLanguageSelector<AbstractRootMethod, CrossLanguageCallGraph> roots, IMethod fakeRootClass2, AnalysisOptions options, IAnalysisCacheView cache)
-
-
Method Details
-
getLanguageRoot
-
makeFakeRootNode
Description copied from class:ExplicitCallGraphsubclasses may wish to override!- Overrides:
makeFakeRootNodein classExplicitCallGraph- Throws:
CancelException
-