diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/CGNode.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/CGNode.java index e2be5c005..27723f38a 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/CGNode.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/CGNode.java @@ -15,6 +15,7 @@ import java.util.Iterator; import com.ibm.wala.classLoader.CallSiteReference; import com.ibm.wala.classLoader.IMethod; import com.ibm.wala.classLoader.NewSiteReference; +import com.ibm.wala.ipa.cha.IClassHierarchyDweller; import com.ibm.wala.ssa.DefUse; import com.ibm.wala.ssa.IR; import com.ibm.wala.util.graph.INodeWithNumber; @@ -25,7 +26,7 @@ import com.ibm.wala.util.graph.INodeWithNumber; * @author Stephen Fink */ -public interface CGNode extends INodeWithNumber, ContextItem { +public interface CGNode extends INodeWithNumber, ContextItem, IClassHierarchyDweller { /** * Return the {@link IMethod method} this CGNode represents. * This value will never be null. diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/BasicCallGraph.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/BasicCallGraph.java index 5c4dd008f..8bc710217 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/BasicCallGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/BasicCallGraph.java @@ -22,6 +22,7 @@ import com.ibm.wala.ipa.callgraph.CGNode; import com.ibm.wala.ipa.callgraph.CallGraph; import com.ibm.wala.ipa.callgraph.Context; import com.ibm.wala.ipa.callgraph.propagation.SSAContextInterpreter; +import com.ibm.wala.ipa.cha.IClassHierarchy; import com.ibm.wala.shrikeBT.IInvokeInstruction; import com.ibm.wala.types.MethodReference; import com.ibm.wala.util.collections.HashMapFactory; @@ -217,6 +218,10 @@ public abstract class BasicCallGraph extends AbstractNumberedGraph imple public abstract boolean addTarget(CallSiteReference reference, CGNode target); + + public IClassHierarchy getClassHierarchy() { + return method.getClassHierarchy(); + } } @Override diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/AbstractInterproceduralCFG.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/AbstractInterproceduralCFG.java index be9fd9fd0..79825dba4 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/AbstractInterproceduralCFG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/AbstractInterproceduralCFG.java @@ -655,7 +655,7 @@ public abstract class AbstractInterproceduralCFG imple return new FilterIterator(getSuccNodes(bb), isReturn); } - public Iterator getCallSites(BasicBlockInContext bb) { + public Iterator> getCallSites(BasicBlockInContext bb) { if (bb == null) { throw new IllegalArgumentException("bb is null"); } @@ -669,7 +669,7 @@ public abstract class AbstractInterproceduralCFG imple } }; MapIterator> m = new MapIterator>(it, toContext); - return new FilterIterator(m, isCall); + return new FilterIterator>(m, isCall); } private final Filter> isCall = new Filter>() { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/analysis/ExplodedControlFlowGraph.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/analysis/ExplodedControlFlowGraph.java index f0b7f69a8..23a3730ac 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/analysis/ExplodedControlFlowGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/analysis/ExplodedControlFlowGraph.java @@ -199,9 +199,11 @@ public class ExplodedControlFlowGraph implements ControlFlowGraph