add standard type parameter to most pointer analysis references. When it breaks we move back to ? extends InstanceKey.
This commit is contained in:
parent
fad9e87654
commit
4772f36d47
|
@ -40,6 +40,8 @@ import com.ibm.wala.classLoader.SourceFileModule;
|
|||
import com.ibm.wala.client.AbstractAnalysisEngine;
|
||||
import com.ibm.wala.ipa.callgraph.CGNode;
|
||||
import com.ibm.wala.ipa.callgraph.CallGraph;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis;
|
||||
import com.ibm.wala.ipa.cha.IClassHierarchy;
|
||||
import com.ibm.wala.properties.WalaProperties;
|
||||
import com.ibm.wala.ssa.IR;
|
||||
|
@ -344,8 +346,8 @@ public abstract class IRTests {
|
|||
|
||||
protected abstract AbstractAnalysisEngine getAnalysisEngine(String[] mainClassDescriptors, Collection<String> sources, List<String> libs);
|
||||
|
||||
public Pair runTest(Collection<String> sources, List<String> libs, String[] mainClassDescriptors, List<? extends IRAssertion> ca,
|
||||
boolean assertReachable) {
|
||||
public Pair<CallGraph, PointerAnalysis<InstanceKey>> runTest(Collection<String> sources, List<String> libs,
|
||||
String[] mainClassDescriptors, List<? extends IRAssertion> ca, boolean assertReachable) {
|
||||
AbstractAnalysisEngine engine = getAnalysisEngine(mainClassDescriptors, sources, libs);
|
||||
|
||||
CallGraph callGraph;
|
||||
|
|
|
@ -379,13 +379,13 @@ public abstract class JavaIRTests extends IRTests {
|
|||
}
|
||||
|
||||
@Test public void testInnerClassA() {
|
||||
Pair x = runTest(singleTestSrc(), rtJar, simpleTestEntryPoint(), new ArrayList<IRAssertion>(), true);
|
||||
Pair<CallGraph, PointerAnalysis<InstanceKey>> x =
|
||||
runTest(singleTestSrc(), rtJar, simpleTestEntryPoint(), new ArrayList<IRAssertion>(), true);
|
||||
|
||||
// can't do an IRAssertion() -- we need the pointer analysis
|
||||
|
||||
CallGraph cg = (CallGraph) x.fst;
|
||||
@SuppressWarnings("unchecked")
|
||||
PointerAnalysis<? extends InstanceKey> pa = (PointerAnalysis<? extends InstanceKey>) x.snd;
|
||||
CallGraph cg = x.fst;
|
||||
PointerAnalysis<InstanceKey> pa = x.snd;
|
||||
|
||||
Iterator<CGNode> iter = cg.iterator();
|
||||
while ( iter.hasNext() ) {
|
||||
|
@ -438,13 +438,13 @@ public abstract class JavaIRTests extends IRTests {
|
|||
}
|
||||
|
||||
@Test public void testInnerClassSuper() {
|
||||
Pair x = runTest(singleTestSrc(), rtJar, simpleTestEntryPoint(), new ArrayList<IRAssertion>(), true);
|
||||
Pair<CallGraph, PointerAnalysis<InstanceKey>> x =
|
||||
runTest(singleTestSrc(), rtJar, simpleTestEntryPoint(), new ArrayList<IRAssertion>(), true);
|
||||
|
||||
// can't do an IRAssertion() -- we need the pointer analysis
|
||||
|
||||
CallGraph cg = (CallGraph) x.fst;
|
||||
@SuppressWarnings("unchecked")
|
||||
PointerAnalysis<? extends InstanceKey> pa = (PointerAnalysis<? extends InstanceKey>) x.snd;
|
||||
CallGraph cg = x.fst;
|
||||
PointerAnalysis<InstanceKey> pa = x.snd;
|
||||
|
||||
Iterator<CGNode> iter = cg.iterator();
|
||||
while ( iter.hasNext() ) {
|
||||
|
@ -596,10 +596,10 @@ public abstract class JavaIRTests extends IRTests {
|
|||
}
|
||||
|
||||
@Test public void testMiniaturSliceBug() throws IllegalArgumentException, CancelException {
|
||||
Pair<?, ?> x = runTest(singleTestSrc(), rtJar, simpleTestEntryPoint(), emptyList, true);
|
||||
Pair<CallGraph, PointerAnalysis<InstanceKey>> x = runTest(singleTestSrc(), rtJar, simpleTestEntryPoint(), emptyList, true);
|
||||
|
||||
PointerAnalysis pa = (PointerAnalysis) x.snd;
|
||||
CallGraph cg = (CallGraph) x.fst;
|
||||
PointerAnalysis<InstanceKey> pa = x.snd;
|
||||
CallGraph cg = x.fst;
|
||||
|
||||
// test partial slice
|
||||
MethodReference sliceRootRef = getSliceRootReference("MiniaturSliceBug", "validNonDispatchedCall", "(LIntWrapper;)V");
|
||||
|
|
|
@ -17,6 +17,7 @@ import com.ibm.wala.cast.java.ssa.AstJavaInstructionVisitor;
|
|||
import com.ibm.wala.cast.java.ssa.AstJavaInvokeInstruction;
|
||||
import com.ibm.wala.cast.java.ssa.EnclosingObjectReference;
|
||||
import com.ibm.wala.ipa.callgraph.CGNode;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerKey;
|
||||
import com.ibm.wala.ipa.modref.ExtendedHeapModel;
|
||||
|
@ -28,7 +29,7 @@ public class AstJavaModRef extends AstModRef {
|
|||
implements AstJavaInstructionVisitor
|
||||
{
|
||||
|
||||
protected AstJavaRefVisitor(CGNode n, Collection<PointerKey> result, PointerAnalysis pa, ExtendedHeapModel h) {
|
||||
protected AstJavaRefVisitor(CGNode n, Collection<PointerKey> result, PointerAnalysis<InstanceKey> pa, ExtendedHeapModel h) {
|
||||
super(n, result, pa, h);
|
||||
}
|
||||
|
||||
|
@ -45,7 +46,7 @@ public class AstJavaModRef extends AstModRef {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected RefVisitor makeRefVisitor(CGNode n, Collection<PointerKey> result, PointerAnalysis pa, ExtendedHeapModel h) {
|
||||
protected RefVisitor makeRefVisitor(CGNode n, Collection<PointerKey> result, PointerAnalysis<InstanceKey> pa, ExtendedHeapModel h) {
|
||||
return new AstJavaRefVisitor(n, result, pa, h);
|
||||
}
|
||||
|
||||
|
@ -54,7 +55,7 @@ public class AstJavaModRef extends AstModRef {
|
|||
implements AstJavaInstructionVisitor
|
||||
{
|
||||
|
||||
protected AstJavaModVisitor(CGNode n, Collection<PointerKey> result, ExtendedHeapModel h, PointerAnalysis pa) {
|
||||
protected AstJavaModVisitor(CGNode n, Collection<PointerKey> result, ExtendedHeapModel h, PointerAnalysis<InstanceKey> pa) {
|
||||
super(n, result, h, pa);
|
||||
}
|
||||
|
||||
|
@ -71,7 +72,7 @@ public class AstJavaModRef extends AstModRef {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected ModVisitor makeModVisitor(CGNode n, Collection<PointerKey> result, PointerAnalysis pa, ExtendedHeapModel h, boolean ignoreAllocHeapDefs) {
|
||||
protected ModVisitor makeModVisitor(CGNode n, Collection<PointerKey> result, PointerAnalysis<InstanceKey> pa, ExtendedHeapModel h, boolean ignoreAllocHeapDefs) {
|
||||
return new AstJavaModVisitor(n, result, h, pa);
|
||||
}
|
||||
|
||||
|
|
|
@ -21,6 +21,7 @@ import com.ibm.wala.cast.java.ipa.modref.AstJavaModRef;
|
|||
import com.ibm.wala.ipa.callgraph.CGNode;
|
||||
import com.ibm.wala.ipa.callgraph.CallGraph;
|
||||
import com.ibm.wala.ipa.callgraph.impl.PartialCallGraph;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis;
|
||||
import com.ibm.wala.ipa.slicer.NormalStatement;
|
||||
import com.ibm.wala.ipa.slicer.SDG;
|
||||
|
@ -111,7 +112,7 @@ public class AstJavaSlicer extends Slicer {
|
|||
});
|
||||
}
|
||||
|
||||
public static Pair<Collection<Statement>, SDG> computeAssertionSlice(CallGraph CG, PointerAnalysis pa,
|
||||
public static Pair<Collection<Statement>, SDG> computeAssertionSlice(CallGraph CG, PointerAnalysis<InstanceKey> pa,
|
||||
Collection<CGNode> partialRoots, boolean multiThreadedCode) throws IllegalArgumentException, CancelException {
|
||||
CallGraph pcg = PartialCallGraph.make(CG, new LinkedHashSet<CGNode>(partialRoots));
|
||||
SDG sdg = new SDG(pcg, pa, new AstJavaModRef(), DataDependenceOptions.FULL, ControlDependenceOptions.FULL);
|
||||
|
|
|
@ -28,6 +28,7 @@ import com.ibm.wala.cast.js.translator.CAstRhinoTranslatorFactory;
|
|||
import com.ibm.wala.ipa.callgraph.CGNode;
|
||||
import com.ibm.wala.ipa.callgraph.CallGraph;
|
||||
import com.ibm.wala.ipa.callgraph.CallGraphBuilderCancelException;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis;
|
||||
import com.ibm.wala.ipa.cha.ClassHierarchyException;
|
||||
import com.ibm.wala.util.NullProgressMonitor;
|
||||
|
@ -59,7 +60,7 @@ public class HTMLCGBuilder {
|
|||
public JSCFABuilder builder;
|
||||
|
||||
/** pointer analysis results; partial if {@link #construction_time} is {@code -1} */
|
||||
public PointerAnalysis pa;
|
||||
public PointerAnalysis<InstanceKey> pa;
|
||||
|
||||
/** call graph; partial if {@link #construction_time} is {@code -1} */
|
||||
public CallGraph cg;
|
||||
|
|
|
@ -18,6 +18,7 @@ import org.junit.Test;
|
|||
import com.ibm.wala.cast.js.ipa.callgraph.JSCFABuilder;
|
||||
import com.ibm.wala.cast.js.translator.CAstRhinoTranslatorFactory;
|
||||
import com.ibm.wala.cast.js.util.Util;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PropagationCallGraphBuilder;
|
||||
import com.ibm.wala.util.CancelException;
|
||||
|
@ -39,7 +40,7 @@ public class TestSimpleCallGraphShapeRhino extends TestSimpleCallGraphShape {
|
|||
public void test214631() throws IOException, IllegalArgumentException, CancelException, WalaException {
|
||||
JSCFABuilder b = JSCallGraphBuilderUtil.makeScriptCGBuilder("tests", "214631.js");
|
||||
b.makeCallGraph(b.getOptions());
|
||||
PointerAnalysis PA = b.getPointerAnalysis();
|
||||
PointerAnalysis<InstanceKey> PA = b.getPointerAnalysis();
|
||||
// just make sure this does not crash
|
||||
}
|
||||
|
||||
|
|
|
@ -31,6 +31,7 @@ import com.ibm.wala.cast.js.translator.CAstRhinoTranslatorFactory;
|
|||
import com.ibm.wala.classLoader.SourceFileModule;
|
||||
import com.ibm.wala.classLoader.SourceModule;
|
||||
import com.ibm.wala.ipa.callgraph.CallGraph;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis;
|
||||
import com.ibm.wala.ipa.cha.ClassHierarchyException;
|
||||
import com.ibm.wala.util.CancelException;
|
||||
|
@ -57,7 +58,7 @@ public class JsViewerDriver extends JSCallGraphBuilderUtil {
|
|||
builder.setBaseURL(url);
|
||||
|
||||
CallGraph cg = builder.makeCallGraph(builder.getOptions());
|
||||
PointerAnalysis pa = builder.getPointerAnalysis();
|
||||
PointerAnalysis<InstanceKey> pa = builder.getPointerAnalysis();
|
||||
|
||||
new JsViewer(cg, pa);
|
||||
}
|
||||
|
|
|
@ -369,7 +369,7 @@ public class JSSSAPropagationCallGraphBuilder extends AstSSAPropagationCallGraph
|
|||
protected PropagationSystem makeSystem(AnalysisOptions options) {
|
||||
return new PropagationSystem(callGraph, pointerKeyFactory, instanceKeyFactory) {
|
||||
@Override
|
||||
public PointerAnalysis makePointerAnalysis(PropagationCallGraphBuilder builder) {
|
||||
public PointerAnalysis<InstanceKey> makePointerAnalysis(PropagationCallGraphBuilder builder) {
|
||||
return new JSPointerAnalysisImpl(builder, cg, pointsToMap, instanceKeys, pointerKeyFactory, instanceKeyFactory);
|
||||
}
|
||||
};
|
||||
|
|
|
@ -37,12 +37,12 @@ public class JsPaPanel extends PaPanel {
|
|||
private MutableMapping<List<ObjectPropertyCatalogKey>> instanceKeyIdToObjectPropertyCatalogKey = MutableMapping.<List<ObjectPropertyCatalogKey>> make();
|
||||
private List<AstGlobalPointerKey> globalsPointerKeys = new ArrayList<AstGlobalPointerKey>();
|
||||
|
||||
public JsPaPanel(CallGraph cg, PointerAnalysis pa) {
|
||||
public JsPaPanel(CallGraph cg, PointerAnalysis<InstanceKey> pa) {
|
||||
super(cg, pa);
|
||||
initDataStructures(pa);
|
||||
}
|
||||
|
||||
private void initDataStructures(PointerAnalysis pa) {
|
||||
private void initDataStructures(PointerAnalysis<InstanceKey> pa) {
|
||||
HeapGraph heapGraph = pa.getHeapGraph();
|
||||
OrdinalSetMapping<InstanceKey> instanceKeyMapping = pa.getInstanceKeyMapping();
|
||||
for (Object n : heapGraph){
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
package com.ibm.wala.cast.js.vis;
|
||||
|
||||
import com.ibm.wala.ipa.callgraph.CallGraph;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis;
|
||||
import com.ibm.wala.viz.viewer.PaPanel;
|
||||
import com.ibm.wala.viz.viewer.WalaViewer;
|
||||
|
@ -19,12 +20,12 @@ public class JsViewer extends WalaViewer{
|
|||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public JsViewer(CallGraph cg, PointerAnalysis pa) {
|
||||
public JsViewer(CallGraph cg, PointerAnalysis<InstanceKey> pa) {
|
||||
super(cg, pa);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected PaPanel createPaPanel(CallGraph cg, PointerAnalysis pa) {
|
||||
protected PaPanel createPaPanel(CallGraph cg, PointerAnalysis<InstanceKey> pa) {
|
||||
return new JsPaPanel(cg, pa);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,6 +26,7 @@ import com.ibm.wala.ipa.callgraph.AnalysisCache;
|
|||
import com.ibm.wala.ipa.callgraph.AnalysisScope;
|
||||
import com.ibm.wala.ipa.callgraph.CGNode;
|
||||
import com.ibm.wala.ipa.callgraph.CallGraph;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerKey;
|
||||
import com.ibm.wala.ssa.IR;
|
||||
|
@ -98,7 +99,7 @@ public class CAstCallGraphUtil {
|
|||
return result;
|
||||
}
|
||||
|
||||
public static void dumpCG(PointerAnalysis PA, CallGraph CG) {
|
||||
public static void dumpCG(PointerAnalysis<InstanceKey> PA, CallGraph CG) {
|
||||
if (AVOID_DUMP)
|
||||
return;
|
||||
for (Iterator x = CG.iterator(); x.hasNext();) {
|
||||
|
|
|
@ -77,7 +77,7 @@ public abstract class CrossLanguageSSAPropagationCallGraphBuilder extends AstSSA
|
|||
protected PropagationSystem makeSystem(AnalysisOptions options) {
|
||||
return new PropagationSystem(callGraph, pointerKeyFactory, instanceKeyFactory) {
|
||||
@Override
|
||||
public PointerAnalysis makePointerAnalysis(PropagationCallGraphBuilder builder) {
|
||||
public PointerAnalysis<InstanceKey> makePointerAnalysis(PropagationCallGraphBuilder builder) {
|
||||
assert builder == CrossLanguageSSAPropagationCallGraphBuilder.this;
|
||||
return new CrossLanguagePointerAnalysisImpl(CrossLanguageSSAPropagationCallGraphBuilder.this, cg, pointsToMap,
|
||||
instanceKeys, pointerKeyFactory, instanceKeyFactory);
|
||||
|
|
|
@ -36,15 +36,15 @@ import com.ibm.wala.util.intset.OrdinalSet;
|
|||
*/
|
||||
public class LexicalModRef {
|
||||
|
||||
public static LexicalModRef make(CallGraph cg, PointerAnalysis pa) {
|
||||
public static LexicalModRef make(CallGraph cg, PointerAnalysis<InstanceKey> pa) {
|
||||
return new LexicalModRef(cg, pa);
|
||||
}
|
||||
|
||||
private final CallGraph cg;
|
||||
|
||||
private final PointerAnalysis pa;
|
||||
private final PointerAnalysis<InstanceKey> pa;
|
||||
|
||||
protected LexicalModRef(CallGraph cg, PointerAnalysis pa) {
|
||||
protected LexicalModRef(CallGraph cg, PointerAnalysis<InstanceKey> pa) {
|
||||
this.cg = cg;
|
||||
this.pa = pa;
|
||||
}
|
||||
|
|
|
@ -23,6 +23,7 @@ import com.ibm.wala.cast.ir.ssa.AstLexicalWrite;
|
|||
import com.ibm.wala.cast.ir.ssa.EachElementGetInstruction;
|
||||
import com.ibm.wala.cast.ir.ssa.EachElementHasNextInstruction;
|
||||
import com.ibm.wala.ipa.callgraph.CGNode;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerKey;
|
||||
import com.ibm.wala.ipa.modref.ExtendedHeapModel;
|
||||
|
@ -35,7 +36,7 @@ public class AstModRef extends ModRef {
|
|||
implements AstInstructionVisitor
|
||||
{
|
||||
|
||||
protected AstRefVisitor(CGNode n, Collection<PointerKey> result, PointerAnalysis pa, ExtendedHeapModel h) {
|
||||
protected AstRefVisitor(CGNode n, Collection<PointerKey> result, PointerAnalysis<InstanceKey> pa, ExtendedHeapModel h) {
|
||||
super(n, result, pa, h);
|
||||
}
|
||||
|
||||
|
@ -86,7 +87,7 @@ public class AstModRef extends ModRef {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected RefVisitor makeRefVisitor(CGNode n, Collection<PointerKey> result, PointerAnalysis pa, ExtendedHeapModel h) {
|
||||
protected RefVisitor makeRefVisitor(CGNode n, Collection<PointerKey> result, PointerAnalysis<InstanceKey> pa, ExtendedHeapModel h) {
|
||||
return new AstRefVisitor(n, result, pa, h);
|
||||
}
|
||||
|
||||
|
@ -95,7 +96,7 @@ public class AstModRef extends ModRef {
|
|||
implements AstInstructionVisitor
|
||||
{
|
||||
|
||||
protected AstModVisitor(CGNode n, Collection<PointerKey> result, ExtendedHeapModel h, PointerAnalysis pa) {
|
||||
protected AstModVisitor(CGNode n, Collection<PointerKey> result, ExtendedHeapModel h, PointerAnalysis<InstanceKey> pa) {
|
||||
super(n, result, h, pa, true);
|
||||
}
|
||||
|
||||
|
@ -146,7 +147,7 @@ public class AstModRef extends ModRef {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected ModVisitor makeModVisitor(CGNode n, Collection<PointerKey> result, PointerAnalysis pa, ExtendedHeapModel h, boolean ignoreAllocHeapDefs) {
|
||||
protected ModVisitor makeModVisitor(CGNode n, Collection<PointerKey> result, PointerAnalysis<InstanceKey> pa, ExtendedHeapModel h, boolean ignoreAllocHeapDefs) {
|
||||
return new AstModVisitor(n, result, h, pa);
|
||||
}
|
||||
|
||||
|
|
|
@ -254,7 +254,7 @@ public class CallGraphTest extends WalaTestCase {
|
|||
AnalysisCache cache = new AnalysisCache();
|
||||
CallGraphBuilder builder = Util.makeZeroOneContainerCFABuilder(options, cache, cha, scope);
|
||||
CallGraph cg = builder.makeCallGraph(options, null);
|
||||
PointerAnalysis pa = builder.getPointerAnalysis();
|
||||
PointerAnalysis<InstanceKey> pa = builder.getPointerAnalysis();
|
||||
CGNode mainMethod = AbstractPtrTest.findMainMethod(cg);
|
||||
PointerKey keyToQuery = AbstractPtrTest.getParam(mainMethod, "testThisVar", pa.getHeapModel());
|
||||
OrdinalSet<InstanceKey> pointsToSet = pa.getPointsToSet(keyToQuery);
|
||||
|
|
|
@ -63,7 +63,7 @@ public class TunedRefinementTest extends AbstractPtrTest {
|
|||
// we know this one fails...
|
||||
// @Test public void testOnTheFlyCS() throws ClassHierarchyException {
|
||||
// String mainClass = TestInfo.TEST_ONTHEFLY_CS;
|
||||
// final IDemandPointerAnalysis dmp =
|
||||
// final IDemandPointerAnalysis<InstanceKey> dmp =
|
||||
// makeDemandPointerAnalysis(TestInfo.SCOPE_FILE, mainClass);
|
||||
// CGNode testMethod =
|
||||
// AbstractPtrTest.findInstanceMethod(dmp.getBaseCallGraph(),
|
||||
|
|
|
@ -65,7 +65,7 @@ public class MultiDimArrayTest extends WalaTestCase {
|
|||
|
||||
CallGraphBuilder builder = Util.makeVanillaZeroOneCFABuilder(options, new AnalysisCache(),cha, scope);
|
||||
CallGraph cg = builder.makeCallGraph(options, null);
|
||||
PointerAnalysis pa = builder.getPointerAnalysis();
|
||||
PointerAnalysis<InstanceKey> pa = builder.getPointerAnalysis();
|
||||
System.err.println(pa);
|
||||
|
||||
CGNode node = findDoNothingNode(cg);
|
||||
|
|
|
@ -48,7 +48,7 @@ public class TypeBasedArrayAliasTest extends WalaTestCase {
|
|||
// RTA yields a TypeBasedPointerAnalysis
|
||||
CallGraphBuilder builder = Util.makeRTABuilder(options, new AnalysisCache(),cha, scope);
|
||||
CallGraph cg = builder.makeCallGraph(options, null);
|
||||
PointerAnalysis pa = builder.getPointerAnalysis();
|
||||
PointerAnalysis<InstanceKey> pa = builder.getPointerAnalysis();
|
||||
|
||||
CGNode node = findNode(cg, "testMayAlias1");
|
||||
PointerKey pk1 = pa.getHeapModel().getPointerKeyForLocal(node, 1);
|
||||
|
@ -77,7 +77,7 @@ public class TypeBasedArrayAliasTest extends WalaTestCase {
|
|||
return null;
|
||||
}
|
||||
|
||||
private static boolean mayAliased(PointerKey pk1, PointerKey pk2, PointerAnalysis pa) {
|
||||
private static boolean mayAliased(PointerKey pk1, PointerKey pk2, PointerAnalysis<InstanceKey> pa) {
|
||||
OrdinalSet<InstanceKey> ptsTo1 = pa.getPointsToSet(pk1);
|
||||
OrdinalSet<InstanceKey> ptsTo2 = pa.getPointsToSet(pk2);
|
||||
boolean foundIntersection = false;
|
||||
|
|
|
@ -52,7 +52,7 @@ public class ZeroLengthArrayTest {
|
|||
|
||||
CallGraphBuilder builder = Util.makeVanillaZeroOneCFABuilder(options, new AnalysisCache(), cha, scope);
|
||||
CallGraph cg = builder.makeCallGraph(options, null);
|
||||
PointerAnalysis pa = builder.getPointerAnalysis();
|
||||
PointerAnalysis<InstanceKey> pa = builder.getPointerAnalysis();
|
||||
// System.err.println(pa);
|
||||
|
||||
HeapModel heapModel = pa.getHeapModel();
|
||||
|
|
|
@ -141,7 +141,7 @@ public class CompareToZeroOneCFADriver {
|
|||
private static void doTests(AnalysisScope scope, final ClassHierarchy cha, AnalysisOptions options) throws IllegalArgumentException, CancelException {
|
||||
final SSAPropagationCallGraphBuilder builder = Util.makeVanillaZeroOneCFABuilder(options, new AnalysisCache(), cha, scope);
|
||||
final CallGraph oldCG = builder.makeCallGraph(options,null);
|
||||
final PointerAnalysis pa = builder.getPointerAnalysis();
|
||||
final PointerAnalysis<InstanceKey> pa = builder.getPointerAnalysis();
|
||||
|
||||
// now, run our analysis
|
||||
// build an RTA call graph
|
||||
|
|
|
@ -204,7 +204,7 @@ public class SimpleThreadEscapeAnalysis extends AbstractAnalysisEngine {
|
|||
// extract data for analysis
|
||||
//
|
||||
CallGraph cg = getCallGraph();
|
||||
PointerAnalysis pa = getPointerAnalysis();
|
||||
PointerAnalysis<InstanceKey> pa = getPointerAnalysis();
|
||||
|
||||
//
|
||||
// collect all places where objects can escape their creating thread:
|
||||
|
|
|
@ -22,6 +22,7 @@ import com.ibm.wala.ipa.callgraph.CallGraph;
|
|||
import com.ibm.wala.ipa.callgraph.CallGraphBuilderCancelException;
|
||||
import com.ibm.wala.ipa.callgraph.Entrypoint;
|
||||
import com.ibm.wala.ipa.callgraph.impl.Util;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis;
|
||||
import com.ibm.wala.ipa.cha.ClassHierarchy;
|
||||
import com.ibm.wala.ipa.cha.ClassHierarchyException;
|
||||
|
@ -65,7 +66,7 @@ public class JavaViewerDriver {
|
|||
com.ibm.wala.ipa.callgraph.CallGraphBuilder builder = Util.makeZeroCFABuilder(options, new AnalysisCache(), cha, scope);
|
||||
CallGraph cg = builder.makeCallGraph(options, null);
|
||||
|
||||
PointerAnalysis pa = builder.getPointerAnalysis();
|
||||
PointerAnalysis<InstanceKey> pa = builder.getPointerAnalysis();
|
||||
new WalaViewer(cg, pa);
|
||||
|
||||
}
|
||||
|
|
|
@ -70,7 +70,7 @@ public class BasicHeapGraph extends HeapGraph {
|
|||
* @param P governing pointer analysis
|
||||
* @throws NullPointerException if P is null
|
||||
*/
|
||||
public BasicHeapGraph(final PointerAnalysis P, final CallGraph callGraph) throws NullPointerException {
|
||||
public BasicHeapGraph(final PointerAnalysis<InstanceKey> P, final CallGraph callGraph) throws NullPointerException {
|
||||
super(P);
|
||||
this.callGraph = callGraph;
|
||||
|
||||
|
|
|
@ -30,7 +30,7 @@ import com.ibm.wala.util.intset.IntSet;
|
|||
*
|
||||
* Nodes in the Graph are {@link PointerKey}s and {@link InstanceKey}s.
|
||||
*
|
||||
* There is an edge from a PointerKey P to an InstanceKey I iff the PointerAnalysis indicates that P may point to I.
|
||||
* There is an edge from a PointerKey P to an InstanceKey I iff the PointerAnalysis<InstanceKey> indicates that P may point to I.
|
||||
*
|
||||
* There is an edge from an InstanceKey I to a PointerKey P iff - P represents a field of an object instance modeled by I, or - P
|
||||
* represents the array contents of array instance I.
|
||||
|
@ -38,9 +38,9 @@ import com.ibm.wala.util.intset.IntSet;
|
|||
@SuppressWarnings("deprecation")
|
||||
public abstract class HeapGraph implements NumberedGraph<Object> {
|
||||
|
||||
private final PointerAnalysis pa;
|
||||
private final PointerAnalysis<InstanceKey> pa;
|
||||
|
||||
protected HeapGraph(PointerAnalysis pa) {
|
||||
protected HeapGraph(PointerAnalysis<InstanceKey> pa) {
|
||||
if (pa == null) {
|
||||
throw new IllegalArgumentException("null pa ");
|
||||
}
|
||||
|
@ -74,7 +74,7 @@ public abstract class HeapGraph implements NumberedGraph<Object> {
|
|||
return pa.getHeapModel();
|
||||
}
|
||||
|
||||
public PointerAnalysis getPointerAnalysis() {
|
||||
public PointerAnalysis<InstanceKey> getPointerAnalysis() {
|
||||
return pa;
|
||||
}
|
||||
|
||||
|
|
|
@ -28,6 +28,7 @@ import com.ibm.wala.ipa.callgraph.CallGraph;
|
|||
import com.ibm.wala.ipa.callgraph.CallGraphBuilder;
|
||||
import com.ibm.wala.ipa.callgraph.Entrypoint;
|
||||
import com.ibm.wala.ipa.callgraph.impl.Util;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis;
|
||||
import com.ibm.wala.ipa.cha.ClassHierarchy;
|
||||
import com.ibm.wala.ipa.cha.ClassHierarchyException;
|
||||
|
@ -113,7 +114,7 @@ public abstract class AbstractAnalysisEngine implements AnalysisEngine {
|
|||
/**
|
||||
* Results of pointer analysis
|
||||
*/
|
||||
protected PointerAnalysis pointerAnalysis;
|
||||
protected PointerAnalysis<InstanceKey> pointerAnalysis;
|
||||
|
||||
/**
|
||||
* Graph view of flow of pointers between heap abstractions
|
||||
|
@ -256,7 +257,7 @@ public abstract class AbstractAnalysisEngine implements AnalysisEngine {
|
|||
return scope;
|
||||
}
|
||||
|
||||
public PointerAnalysis getPointerAnalysis() {
|
||||
public PointerAnalysis<InstanceKey> getPointerAnalysis() {
|
||||
return pointerAnalysis;
|
||||
}
|
||||
|
||||
|
|
|
@ -409,7 +409,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo {
|
|||
* @return a {@link PointsToResult} indicating whether a points-to set satisfying the predicate was computed
|
||||
* @throws IllegalArgumentException if <code>pk</code> is not a {@link LocalPointerKey}; to eventually be fixed
|
||||
*/
|
||||
public PointsToResult pointsToPassesPred(PointerKey pk, Predicate<InstanceKey> ikeyPred, PointerAnalysis pa)
|
||||
public PointsToResult pointsToPassesPred(PointerKey pk, Predicate<InstanceKey> ikeyPred, PointerAnalysis<InstanceKey> pa)
|
||||
throws IllegalArgumentException {
|
||||
if (!(pk instanceof com.ibm.wala.ipa.callgraph.propagation.LocalPointerKey)) {
|
||||
throw new IllegalArgumentException("only locals for now");
|
||||
|
@ -2047,7 +2047,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo {
|
|||
*/
|
||||
@SuppressWarnings("unused")
|
||||
private boolean doTopLevelTraversal(PointerKey pk, final Predicate<InstanceKey> pred, final PointsToComputer ptoComputer,
|
||||
PointerAnalysis pa) {
|
||||
PointerAnalysis<InstanceKey> pa) {
|
||||
final Set<PointerKeyAndState> visited = HashSetFactory.make();
|
||||
final LinkedList<PointerKeyAndState> worklist = new LinkedList<PointerKeyAndState>();
|
||||
|
||||
|
@ -2458,7 +2458,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo {
|
|||
return true;
|
||||
}
|
||||
|
||||
private boolean predHoldsForPk(PointerKey curPk, Predicate<InstanceKey> pred, PointerAnalysis pa) {
|
||||
private boolean predHoldsForPk(PointerKey curPk, Predicate<InstanceKey> pred, PointerAnalysis<InstanceKey> pa) {
|
||||
PointerKey curPkForPAHeapModel = convertToHeapModel(curPk, pa.getHeapModel());
|
||||
OrdinalSet<InstanceKey> pointsToSet = pa.getPointsToSet(curPkForPAHeapModel);
|
||||
for (InstanceKey ik : pointsToSet) {
|
||||
|
|
|
@ -43,7 +43,7 @@ public class PABasedMemoryAccessMap implements MemoryAccessMap {
|
|||
|
||||
private static final boolean DEBUG = false;
|
||||
|
||||
private final PointerAnalysis<? extends InstanceKey> pa;
|
||||
private final PointerAnalysis<InstanceKey> pa;
|
||||
|
||||
private final HeapModel heapModel;
|
||||
|
||||
|
@ -51,15 +51,15 @@ public class PABasedMemoryAccessMap implements MemoryAccessMap {
|
|||
|
||||
private final Map<PointerKey, Set<Statement>> invRef;
|
||||
|
||||
public PABasedMemoryAccessMap(CallGraph cg, PointerAnalysis<? extends InstanceKey> pa) {
|
||||
public PABasedMemoryAccessMap(CallGraph cg, PointerAnalysis<InstanceKey> pa) {
|
||||
this(cg, pa, new SDG(cg, pa, DataDependenceOptions.NO_BASE_NO_HEAP_NO_EXCEPTIONS, ControlDependenceOptions.NONE));
|
||||
}
|
||||
|
||||
public PABasedMemoryAccessMap(CallGraph cg, PointerAnalysis<? extends InstanceKey> pa, SDG sdg) {
|
||||
public PABasedMemoryAccessMap(CallGraph cg, PointerAnalysis<InstanceKey> pa, SDG sdg) {
|
||||
this(cg, pa, CISlicer.scanForMod(sdg, pa, true, ModRef.make()), CISlicer.scanForRef(sdg, pa));
|
||||
}
|
||||
|
||||
public PABasedMemoryAccessMap(CallGraph cg, PointerAnalysis<? extends InstanceKey> pa, Map<Statement, Set<PointerKey>> mod,
|
||||
public PABasedMemoryAccessMap(CallGraph cg, PointerAnalysis<InstanceKey> pa, Map<Statement, Set<PointerKey>> mod,
|
||||
Map<Statement, Set<PointerKey>> ref) {
|
||||
if (pa == null) {
|
||||
throw new IllegalArgumentException("null pa");
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
*******************************************************************************/
|
||||
package com.ibm.wala.ipa.callgraph;
|
||||
|
||||
import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis;
|
||||
import com.ibm.wala.util.CancelException;
|
||||
|
||||
|
@ -21,15 +22,15 @@ public class CallGraphBuilderCancelException extends CancelException {
|
|||
|
||||
private final CallGraph cg;
|
||||
|
||||
private final PointerAnalysis pointerAnalysis;
|
||||
private final PointerAnalysis<InstanceKey> pointerAnalysis;
|
||||
|
||||
public static CallGraphBuilderCancelException createCallGraphBuilderCancelException(Exception cause, CallGraph cg,
|
||||
PointerAnalysis pointerAnalysis) {
|
||||
PointerAnalysis<InstanceKey> pointerAnalysis) {
|
||||
return new CallGraphBuilderCancelException(cause, cg, pointerAnalysis);
|
||||
}
|
||||
|
||||
public static CallGraphBuilderCancelException createCallGraphBuilderCancelException(String msg, CallGraph cg,
|
||||
PointerAnalysis pointerAnalysis) {
|
||||
PointerAnalysis<InstanceKey> pointerAnalysis) {
|
||||
return new CallGraphBuilderCancelException(msg, cg, pointerAnalysis);
|
||||
}
|
||||
|
||||
|
@ -43,17 +44,17 @@ public class CallGraphBuilderCancelException extends CancelException {
|
|||
/**
|
||||
* @return the {@link PointerAnalysis} in whatever state it was left when computation was canceled
|
||||
*/
|
||||
public PointerAnalysis getPartialPointerAnalysis() {
|
||||
public PointerAnalysis<InstanceKey> getPartialPointerAnalysis() {
|
||||
return pointerAnalysis;
|
||||
}
|
||||
|
||||
private CallGraphBuilderCancelException(String msg, CallGraph cg, PointerAnalysis pointerAnalysis) {
|
||||
private CallGraphBuilderCancelException(String msg, CallGraph cg, PointerAnalysis<InstanceKey> pointerAnalysis) {
|
||||
super(msg);
|
||||
this.cg = cg;
|
||||
this.pointerAnalysis = pointerAnalysis;
|
||||
}
|
||||
|
||||
private CallGraphBuilderCancelException(Exception cause, CallGraph cg, PointerAnalysis pointerAnalysis) {
|
||||
private CallGraphBuilderCancelException(Exception cause, CallGraph cg, PointerAnalysis<InstanceKey> pointerAnalysis) {
|
||||
super(cause);
|
||||
this.cg = cg;
|
||||
this.pointerAnalysis = pointerAnalysis;
|
||||
|
|
|
@ -89,7 +89,7 @@ public class PropagationSystem extends DefaultFixedPointSolver<PointsToSetVariab
|
|||
/**
|
||||
* An abstraction of the pointer analysis result
|
||||
*/
|
||||
private PointerAnalysis pointerAnalysis;
|
||||
private PointerAnalysis<InstanceKey> pointerAnalysis;
|
||||
|
||||
/**
|
||||
* Meta-data regarding how pointers are modelled.
|
||||
|
@ -134,7 +134,7 @@ public class PropagationSystem extends DefaultFixedPointSolver<PointsToSetVariab
|
|||
/**
|
||||
* @return an object which encapsulates the pointer analysis result
|
||||
*/
|
||||
public PointerAnalysis makePointerAnalysis(PropagationCallGraphBuilder builder) {
|
||||
public PointerAnalysis<InstanceKey> makePointerAnalysis(PropagationCallGraphBuilder builder) {
|
||||
return new PointerAnalysisImpl(builder, cg, pointsToMap, instanceKeys, pointerKeyFactory, instanceKeyFactory);
|
||||
}
|
||||
|
||||
|
@ -601,7 +601,7 @@ public class PropagationSystem extends DefaultFixedPointSolver<PointsToSetVariab
|
|||
/**
|
||||
* @return an object that encapsulates the pointer analysis results
|
||||
*/
|
||||
public PointerAnalysis extractPointerAnalysis(PropagationCallGraphBuilder builder) {
|
||||
public PointerAnalysis<InstanceKey> extractPointerAnalysis(PropagationCallGraphBuilder builder) {
|
||||
if (pointerAnalysis == null) {
|
||||
pointerAnalysis = makePointerAnalysis(builder);
|
||||
}
|
||||
|
|
|
@ -418,7 +418,7 @@ public abstract class AbstractRTABuilder extends PropagationCallGraphBuilder {
|
|||
* @see com.ibm.wala.ipa.callgraph.CallGraphBuilder#getPointerAnalysis()
|
||||
*/
|
||||
@Override
|
||||
public PointerAnalysis getPointerAnalysis() {
|
||||
public PointerAnalysis<InstanceKey> getPointerAnalysis() {
|
||||
return TypeBasedPointerAnalysis.make(getOptions(), allocatedClasses, getCallGraph());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -57,7 +57,7 @@ public class ModRef {
|
|||
* @throws IllegalArgumentException if cg is null
|
||||
*
|
||||
*/
|
||||
public Map<CGNode, OrdinalSet<PointerKey>> computeMod(CallGraph cg, PointerAnalysis pa, HeapExclusions heapExclude) {
|
||||
public Map<CGNode, OrdinalSet<PointerKey>> computeMod(CallGraph cg, PointerAnalysis<InstanceKey> pa, HeapExclusions heapExclude) {
|
||||
if (cg == null) {
|
||||
throw new IllegalArgumentException("cg is null");
|
||||
}
|
||||
|
@ -71,7 +71,7 @@ public class ModRef {
|
|||
* @throws IllegalArgumentException if cg is null
|
||||
*
|
||||
*/
|
||||
public Map<CGNode, OrdinalSet<PointerKey>> computeRef(CallGraph cg, PointerAnalysis pa, HeapExclusions heapExclude) {
|
||||
public Map<CGNode, OrdinalSet<PointerKey>> computeRef(CallGraph cg, PointerAnalysis<InstanceKey> pa, HeapExclusions heapExclude) {
|
||||
if (cg == null) {
|
||||
throw new IllegalArgumentException("cg is null");
|
||||
}
|
||||
|
@ -83,7 +83,7 @@ public class ModRef {
|
|||
* For each call graph node, what heap locations (as determined by a heap model) may it write, including its callees transitively
|
||||
*
|
||||
*/
|
||||
public Map<CGNode, OrdinalSet<PointerKey>> computeMod(CallGraph cg, PointerAnalysis pa) {
|
||||
public Map<CGNode, OrdinalSet<PointerKey>> computeMod(CallGraph cg, PointerAnalysis<InstanceKey> pa) {
|
||||
return computeMod(cg, pa, null);
|
||||
}
|
||||
|
||||
|
@ -91,7 +91,7 @@ public class ModRef {
|
|||
* For each call graph node, what heap locations (as determined by a heap model) may it read, including its callees transitively
|
||||
*
|
||||
*/
|
||||
public Map<CGNode, OrdinalSet<PointerKey>> computeRef(CallGraph cg, PointerAnalysis pa) {
|
||||
public Map<CGNode, OrdinalSet<PointerKey>> computeRef(CallGraph cg, PointerAnalysis<InstanceKey> pa) {
|
||||
return computeRef(cg, pa, null);
|
||||
}
|
||||
|
||||
|
@ -101,7 +101,7 @@ public class ModRef {
|
|||
*
|
||||
* @param heapExclude
|
||||
*/
|
||||
private Map<CGNode, Collection<PointerKey>> scanForMod(CallGraph cg, final PointerAnalysis pa, final HeapExclusions heapExclude) {
|
||||
private Map<CGNode, Collection<PointerKey>> scanForMod(CallGraph cg, final PointerAnalysis<InstanceKey> pa, final HeapExclusions heapExclude) {
|
||||
|
||||
return CallGraphTransitiveClosure.collectNodeResults(cg, new Function<CGNode, Collection<PointerKey>>() {
|
||||
|
||||
|
@ -118,7 +118,7 @@ public class ModRef {
|
|||
*
|
||||
* @param heapExclude
|
||||
*/
|
||||
private Map<CGNode, Collection<PointerKey>> scanForRef(CallGraph cg, final PointerAnalysis pa, final HeapExclusions heapExclude) {
|
||||
private Map<CGNode, Collection<PointerKey>> scanForRef(CallGraph cg, final PointerAnalysis<InstanceKey> pa, final HeapExclusions heapExclude) {
|
||||
return CallGraphTransitiveClosure.collectNodeResults(cg, new Function<CGNode, Collection<PointerKey>>() {
|
||||
|
||||
@Override
|
||||
|
@ -134,7 +134,7 @@ public class ModRef {
|
|||
*
|
||||
* @param heapExclude
|
||||
*/
|
||||
private Collection<PointerKey> scanNodeForMod(final CGNode n, final PointerAnalysis pa, HeapExclusions heapExclude) {
|
||||
private Collection<PointerKey> scanNodeForMod(final CGNode n, final PointerAnalysis<InstanceKey> pa, HeapExclusions heapExclude) {
|
||||
Collection<PointerKey> result = HashSetFactory.make();
|
||||
final ExtendedHeapModel h = new DelegatingExtendedHeapModel(pa.getHeapModel());
|
||||
SSAInstruction.Visitor v = makeModVisitor(n, result, pa, h);
|
||||
|
@ -154,7 +154,7 @@ public class ModRef {
|
|||
* For a call graph node, what heap locations (as determined by a heap model) may it read, <bf> NOT </bf> including it's callees
|
||||
* transitively
|
||||
*/
|
||||
private Collection<PointerKey> scanNodeForRef(final CGNode n, final PointerAnalysis pa, HeapExclusions heapExclude) {
|
||||
private Collection<PointerKey> scanNodeForRef(final CGNode n, final PointerAnalysis<InstanceKey> pa, HeapExclusions heapExclude) {
|
||||
Collection<PointerKey> result = HashSetFactory.make();
|
||||
final ExtendedHeapModel h = new DelegatingExtendedHeapModel(pa.getHeapModel());
|
||||
SSAInstruction.Visitor v = makeRefVisitor(n, result, pa, h);
|
||||
|
@ -175,11 +175,11 @@ public class ModRef {
|
|||
|
||||
private final Collection<PointerKey> result;
|
||||
|
||||
private final PointerAnalysis<? extends InstanceKey> pa;
|
||||
private final PointerAnalysis<InstanceKey> pa;
|
||||
|
||||
private final ExtendedHeapModel h;
|
||||
|
||||
protected RefVisitor(CGNode n, Collection<PointerKey> result, PointerAnalysis<? extends InstanceKey> pa, ExtendedHeapModel h) {
|
||||
protected RefVisitor(CGNode n, Collection<PointerKey> result, PointerAnalysis<InstanceKey> pa, ExtendedHeapModel h) {
|
||||
this.n = n;
|
||||
this.result = result;
|
||||
this.pa = pa;
|
||||
|
@ -225,12 +225,12 @@ public class ModRef {
|
|||
|
||||
private final ExtendedHeapModel h;
|
||||
|
||||
private final PointerAnalysis<? extends InstanceKey> pa;
|
||||
private final PointerAnalysis<InstanceKey> pa;
|
||||
|
||||
private final boolean ignoreAllocHeapDefs;
|
||||
|
||||
protected ModVisitor(CGNode n, Collection<PointerKey> result, ExtendedHeapModel h,
|
||||
PointerAnalysis<? extends InstanceKey> pa, boolean ignoreAllocHeapDefs) {
|
||||
PointerAnalysis<InstanceKey> pa, boolean ignoreAllocHeapDefs) {
|
||||
this.n = n;
|
||||
this.result = result;
|
||||
this.h = h;
|
||||
|
@ -329,11 +329,11 @@ public class ModRef {
|
|||
}
|
||||
}
|
||||
|
||||
protected ModVisitor makeModVisitor(CGNode n, Collection<PointerKey> result, PointerAnalysis pa, ExtendedHeapModel h) {
|
||||
protected ModVisitor makeModVisitor(CGNode n, Collection<PointerKey> result, PointerAnalysis<InstanceKey> pa, ExtendedHeapModel h) {
|
||||
return makeModVisitor(n, result, pa, h, false);
|
||||
}
|
||||
|
||||
protected ModVisitor makeModVisitor(CGNode n, Collection<PointerKey> result, PointerAnalysis pa, ExtendedHeapModel h,
|
||||
protected ModVisitor makeModVisitor(CGNode n, Collection<PointerKey> result, PointerAnalysis<InstanceKey> pa, ExtendedHeapModel h,
|
||||
boolean ignoreAllocHeapDefs) {
|
||||
return new ModVisitor(n, result, h, pa, ignoreAllocHeapDefs);
|
||||
}
|
||||
|
@ -341,14 +341,14 @@ public class ModRef {
|
|||
/**
|
||||
* Compute the set of {@link PointerKey}s that represent pointers that instruction s may write to.
|
||||
*/
|
||||
public Set<PointerKey> getMod(CGNode n, ExtendedHeapModel h, PointerAnalysis pa, SSAInstruction s, HeapExclusions hexcl) {
|
||||
public Set<PointerKey> getMod(CGNode n, ExtendedHeapModel h, PointerAnalysis<InstanceKey> pa, SSAInstruction s, HeapExclusions hexcl) {
|
||||
return getMod(n, h, pa, s, hexcl, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Compute the set of {@link PointerKey}s that represent pointers that instruction s may write to.
|
||||
*/
|
||||
public Set<PointerKey> getMod(CGNode n, ExtendedHeapModel h, PointerAnalysis pa, SSAInstruction s, HeapExclusions hexcl,
|
||||
public Set<PointerKey> getMod(CGNode n, ExtendedHeapModel h, PointerAnalysis<InstanceKey> pa, SSAInstruction s, HeapExclusions hexcl,
|
||||
boolean ignoreAllocHeapDefs) {
|
||||
if (s == null) {
|
||||
throw new IllegalArgumentException("s is null");
|
||||
|
@ -359,14 +359,14 @@ public class ModRef {
|
|||
return hexcl == null ? result : hexcl.filter(result);
|
||||
}
|
||||
|
||||
protected RefVisitor makeRefVisitor(CGNode n, Collection<PointerKey> result, PointerAnalysis pa, ExtendedHeapModel h) {
|
||||
protected RefVisitor makeRefVisitor(CGNode n, Collection<PointerKey> result, PointerAnalysis<InstanceKey> pa, ExtendedHeapModel h) {
|
||||
return new RefVisitor(n, result, pa, h);
|
||||
}
|
||||
|
||||
/**
|
||||
* Compute the set of {@link PointerKey}s that represent pointers that instruction s may read.
|
||||
*/
|
||||
public Set<PointerKey> getRef(CGNode n, ExtendedHeapModel h, PointerAnalysis pa, SSAInstruction s, HeapExclusions hexcl) {
|
||||
public Set<PointerKey> getRef(CGNode n, ExtendedHeapModel h, PointerAnalysis<InstanceKey> pa, SSAInstruction s, HeapExclusions hexcl) {
|
||||
if (s == null) {
|
||||
throw new IllegalArgumentException("s is null");
|
||||
}
|
||||
|
|
|
@ -28,6 +28,7 @@ import com.ibm.wala.fixpoint.BitVectorVariable;
|
|||
import com.ibm.wala.fixpoint.UnaryOperator;
|
||||
import com.ibm.wala.ipa.callgraph.CGNode;
|
||||
import com.ibm.wala.ipa.callgraph.CallGraph;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerKey;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.StaticFieldKey;
|
||||
|
@ -93,7 +94,7 @@ public class HeapReachingDefs {
|
|||
* @throws IllegalArgumentException if statements is null
|
||||
*/
|
||||
@SuppressWarnings("unused")
|
||||
public Map<Statement, OrdinalSet<Statement>> computeReachingDefs(CGNode node, IR ir, PointerAnalysis pa,
|
||||
public Map<Statement, OrdinalSet<Statement>> computeReachingDefs(CGNode node, IR ir, PointerAnalysis<InstanceKey> pa,
|
||||
Map<CGNode, OrdinalSet<PointerKey>> mod, Collection<Statement> statements, HeapExclusions exclusions, CallGraph cg) {
|
||||
|
||||
if (statements == null) {
|
||||
|
@ -148,7 +149,7 @@ public class HeapReachingDefs {
|
|||
private final CallGraph cg;
|
||||
|
||||
RDMap(BitVectorSolver<? extends ISSABasicBlock> solver, OrdinalSetMapping<Statement> domain, CGNode node, ExtendedHeapModel h,
|
||||
PointerAnalysis pa, Map<CGNode, OrdinalSet<PointerKey>> mod, ExplodedControlFlowGraph cfg,
|
||||
PointerAnalysis<InstanceKey> pa, Map<CGNode, OrdinalSet<PointerKey>> mod, ExplodedControlFlowGraph cfg,
|
||||
Map<Integer, NormalStatement> ssaInstructionIndex2Statement, HeapExclusions exclusions, CallGraph cg) {
|
||||
if (VERBOSE) {
|
||||
System.err.println("Init pointer Key mod ");
|
||||
|
@ -166,7 +167,7 @@ public class HeapReachingDefs {
|
|||
}
|
||||
|
||||
private void eagerPopulate(Map<PointerKey, MutableIntSet> pointerKeyMod, BitVectorSolver<? extends ISSABasicBlock> solver,
|
||||
OrdinalSetMapping<Statement> domain, CGNode node, ExtendedHeapModel h, PointerAnalysis pa,
|
||||
OrdinalSetMapping<Statement> domain, CGNode node, ExtendedHeapModel h, PointerAnalysis<InstanceKey> pa,
|
||||
Map<CGNode, OrdinalSet<PointerKey>> mod, ExplodedControlFlowGraph cfg,
|
||||
Map<Integer, NormalStatement> ssaInstruction2Statement) {
|
||||
for (Statement s : domain) {
|
||||
|
@ -178,7 +179,7 @@ public class HeapReachingDefs {
|
|||
* For each pointerKey, which statements may def it
|
||||
*/
|
||||
private Map<PointerKey, MutableIntSet> initPointerKeyMod(OrdinalSetMapping<Statement> domain, CGNode node, ExtendedHeapModel h,
|
||||
PointerAnalysis pa) {
|
||||
PointerAnalysis<InstanceKey> pa) {
|
||||
Map<PointerKey, MutableIntSet> pointerKeyMod = HashMapFactory.make();
|
||||
for (Statement s : domain) {
|
||||
switch (s.getKind()) {
|
||||
|
@ -303,7 +304,7 @@ public class HeapReachingDefs {
|
|||
*/
|
||||
OrdinalSet<Statement> computeResult(Statement s, Map<PointerKey, MutableIntSet> pointerKeyMod,
|
||||
BitVectorSolver<? extends ISSABasicBlock> solver, OrdinalSetMapping<Statement> domain, CGNode node, ExtendedHeapModel h,
|
||||
PointerAnalysis pa, Map<CGNode, OrdinalSet<PointerKey>> mod, ExplodedControlFlowGraph cfg,
|
||||
PointerAnalysis<InstanceKey> pa, Map<CGNode, OrdinalSet<PointerKey>> mod, ExplodedControlFlowGraph cfg,
|
||||
Map<Integer, NormalStatement> ssaInstructionIndex2Statement) {
|
||||
switch (s.getKind()) {
|
||||
case NORMAL:
|
||||
|
@ -394,7 +395,7 @@ public class HeapReachingDefs {
|
|||
* For each statement s, compute the set of statements that may def the heap value read by s.
|
||||
*/
|
||||
private Map<Statement, OrdinalSet<Statement>> makeResult(BitVectorSolver<? extends ISSABasicBlock> solver,
|
||||
OrdinalSetMapping<Statement> domain, CGNode node, ExtendedHeapModel h, PointerAnalysis pa,
|
||||
OrdinalSetMapping<Statement> domain, CGNode node, ExtendedHeapModel h, PointerAnalysis<InstanceKey> pa,
|
||||
Map<CGNode, OrdinalSet<PointerKey>> mod, ExplodedControlFlowGraph cfg,
|
||||
Map<Integer, NormalStatement> ssaInstructionIndex2Statement, HeapExclusions exclusions, CallGraph cg) {
|
||||
|
||||
|
@ -417,7 +418,7 @@ public class HeapReachingDefs {
|
|||
return true;
|
||||
}
|
||||
|
||||
private Collection<PointerKey> getMod(Statement s, CGNode n, ExtendedHeapModel h, PointerAnalysis pa, HeapExclusions exclusions) {
|
||||
private Collection<PointerKey> getMod(Statement s, CGNode n, ExtendedHeapModel h, PointerAnalysis<InstanceKey> pa, HeapExclusions exclusions) {
|
||||
switch (s.getKind()) {
|
||||
case NORMAL:
|
||||
NormalStatement ns = (NormalStatement) s;
|
||||
|
@ -478,7 +479,7 @@ public class HeapReachingDefs {
|
|||
|
||||
private final OrdinalSetMapping<Statement> domain;
|
||||
|
||||
private final PointerAnalysis pa;
|
||||
private final PointerAnalysis<InstanceKey> pa;
|
||||
|
||||
private final ExtendedHeapModel h;
|
||||
|
||||
|
@ -492,7 +493,7 @@ public class HeapReachingDefs {
|
|||
*/
|
||||
private final IBinaryNaturalRelation heapReturnCaller = new BasicNaturalRelation();
|
||||
|
||||
public RD(CGNode node, ExplodedControlFlowGraph cfg, PointerAnalysis pa, OrdinalSetMapping<Statement> domain,
|
||||
public RD(CGNode node, ExplodedControlFlowGraph cfg, PointerAnalysis<InstanceKey> pa, OrdinalSetMapping<Statement> domain,
|
||||
Map<Integer, NormalStatement> ssaInstructionIndex2Statement, HeapExclusions exclusions) {
|
||||
this.node = node;
|
||||
this.cfg = cfg;
|
||||
|
|
|
@ -22,9 +22,9 @@ import com.ibm.wala.analysis.stackMachine.AbstractIntStackMachine;
|
|||
import com.ibm.wala.cfg.ControlFlowGraph;
|
||||
import com.ibm.wala.cfg.cdg.ControlDependenceGraph;
|
||||
import com.ibm.wala.classLoader.CallSiteReference;
|
||||
import com.ibm.wala.classLoader.IClass;
|
||||
import com.ibm.wala.ipa.callgraph.CGNode;
|
||||
import com.ibm.wala.ipa.callgraph.CallGraph;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerKey;
|
||||
import com.ibm.wala.ipa.cfg.ExceptionPrunedCFG;
|
||||
|
@ -105,7 +105,7 @@ public class PDG implements NumberedGraph<Statement> {
|
|||
|
||||
private final Collection<PointerKey> locationsHandled = HashSetFactory.make();
|
||||
|
||||
private final PointerAnalysis pa;
|
||||
private final PointerAnalysis<InstanceKey> pa;
|
||||
|
||||
private final ExtendedHeapModel heapModel;
|
||||
|
||||
|
@ -131,7 +131,7 @@ public class PDG implements NumberedGraph<Statement> {
|
|||
* @param ref the set of heap locations which may be read (transitively) by this node. These are logically parameters in the SDG.
|
||||
* @throws IllegalArgumentException if node is null
|
||||
*/
|
||||
public PDG(final CGNode node, PointerAnalysis pa, Map<CGNode, OrdinalSet<PointerKey>> mod,
|
||||
public PDG(final CGNode node, PointerAnalysis<InstanceKey> pa, Map<CGNode, OrdinalSet<PointerKey>> mod,
|
||||
Map<CGNode, OrdinalSet<PointerKey>> ref, DataDependenceOptions dOptions, ControlDependenceOptions cOptions,
|
||||
HeapExclusions exclusions, CallGraph cg, ModRef modRef) {
|
||||
this(node, pa, mod, ref, dOptions, cOptions, exclusions, cg, modRef, false);
|
||||
|
@ -143,7 +143,7 @@ public class PDG implements NumberedGraph<Statement> {
|
|||
* @param ref the set of heap locations which may be read (transitively) by this node. These are logically parameters in the SDG.
|
||||
* @throws IllegalArgumentException if node is null
|
||||
*/
|
||||
public PDG(final CGNode node, PointerAnalysis pa, Map<CGNode, OrdinalSet<PointerKey>> mod,
|
||||
public PDG(final CGNode node, PointerAnalysis<InstanceKey> pa, Map<CGNode, OrdinalSet<PointerKey>> mod,
|
||||
Map<CGNode, OrdinalSet<PointerKey>> ref, DataDependenceOptions dOptions, ControlDependenceOptions cOptions,
|
||||
HeapExclusions exclusions, CallGraph cg, ModRef modRef, boolean ignoreAllocHeapDefs) {
|
||||
|
||||
|
|
|
@ -18,6 +18,7 @@ import java.util.Map;
|
|||
import com.ibm.wala.classLoader.CallSiteReference;
|
||||
import com.ibm.wala.ipa.callgraph.CGNode;
|
||||
import com.ibm.wala.ipa.callgraph.CallGraph;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerKey;
|
||||
import com.ibm.wala.ipa.cha.IClassHierarchy;
|
||||
|
@ -77,7 +78,7 @@ public class SDG extends AbstractNumberedGraph<Statement> implements ISDG {
|
|||
/**
|
||||
* governing pointer analysis
|
||||
*/
|
||||
private final PointerAnalysis pa;
|
||||
private final PointerAnalysis<InstanceKey> pa;
|
||||
|
||||
/**
|
||||
* keeps track of PDG for each call graph node
|
||||
|
@ -121,16 +122,16 @@ public class SDG extends AbstractNumberedGraph<Statement> implements ISDG {
|
|||
*/
|
||||
private boolean eagerComputed = false;
|
||||
|
||||
public SDG(final CallGraph cg, PointerAnalysis pa, DataDependenceOptions dOptions, ControlDependenceOptions cOptions) {
|
||||
public SDG(final CallGraph cg, PointerAnalysis<InstanceKey> pa, DataDependenceOptions dOptions, ControlDependenceOptions cOptions) {
|
||||
this(cg, pa, ModRef.make(), dOptions, cOptions, null);
|
||||
}
|
||||
|
||||
public SDG(final CallGraph cg, PointerAnalysis pa, ModRef modRef, DataDependenceOptions dOptions,
|
||||
public SDG(final CallGraph cg, PointerAnalysis<InstanceKey> pa, ModRef modRef, DataDependenceOptions dOptions,
|
||||
ControlDependenceOptions cOptions) {
|
||||
this(cg, pa, modRef, dOptions, cOptions, null);
|
||||
}
|
||||
|
||||
public SDG(CallGraph cg, PointerAnalysis pa, ModRef modRef, DataDependenceOptions dOptions, ControlDependenceOptions cOptions,
|
||||
public SDG(CallGraph cg, PointerAnalysis<InstanceKey> pa, ModRef modRef, DataDependenceOptions dOptions, ControlDependenceOptions cOptions,
|
||||
HeapExclusions heapExclude) throws IllegalArgumentException {
|
||||
super();
|
||||
if (dOptions == null) {
|
||||
|
@ -819,7 +820,7 @@ public class SDG extends AbstractNumberedGraph<Statement> implements ISDG {
|
|||
return cg.getClassHierarchy();
|
||||
}
|
||||
|
||||
public PointerAnalysis getPointerAnalysis() {
|
||||
public PointerAnalysis<InstanceKey> getPointerAnalysis() {
|
||||
return pa;
|
||||
}
|
||||
|
||||
|
|
|
@ -24,6 +24,7 @@ import com.ibm.wala.dataflow.IFDS.TabulationDomain;
|
|||
import com.ibm.wala.dataflow.IFDS.TabulationResult;
|
||||
import com.ibm.wala.dataflow.IFDS.UnorderedDomain;
|
||||
import com.ibm.wala.ipa.callgraph.CallGraph;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis;
|
||||
import com.ibm.wala.ipa.modref.ModRef;
|
||||
import com.ibm.wala.util.CancelException;
|
||||
|
@ -129,7 +130,7 @@ public class Slicer {
|
|||
* @return the backward slice of s.
|
||||
* @throws CancelException
|
||||
*/
|
||||
public static Collection<Statement> computeBackwardSlice(Statement s, CallGraph cg, PointerAnalysis pa,
|
||||
public static Collection<Statement> computeBackwardSlice(Statement s, CallGraph cg, PointerAnalysis<InstanceKey> pa,
|
||||
DataDependenceOptions dOptions, ControlDependenceOptions cOptions) throws IllegalArgumentException, CancelException {
|
||||
return computeSlice(new SDG(cg, pa, ModRef.make(), dOptions, cOptions), Collections.singleton(s), true);
|
||||
}
|
||||
|
@ -139,7 +140,7 @@ public class Slicer {
|
|||
* @return the forward slice of s.
|
||||
* @throws CancelException
|
||||
*/
|
||||
public static Collection<Statement> computeForwardSlice(Statement s, CallGraph cg, PointerAnalysis pa,
|
||||
public static Collection<Statement> computeForwardSlice(Statement s, CallGraph cg, PointerAnalysis<InstanceKey> pa,
|
||||
DataDependenceOptions dOptions, ControlDependenceOptions cOptions) throws IllegalArgumentException, CancelException {
|
||||
return computeSlice(new SDG(cg, pa, ModRef.make(), dOptions, cOptions), Collections.singleton(s), false);
|
||||
}
|
||||
|
@ -225,7 +226,7 @@ public class Slicer {
|
|||
* @return the backward slice of s.
|
||||
* @throws CancelException
|
||||
*/
|
||||
public static Collection<Statement> computeBackwardSlice(Statement s, CallGraph cg, PointerAnalysis pointerAnalysis)
|
||||
public static Collection<Statement> computeBackwardSlice(Statement s, CallGraph cg, PointerAnalysis<InstanceKey> pointerAnalysis)
|
||||
throws IllegalArgumentException, CancelException {
|
||||
return computeBackwardSlice(s, cg, pointerAnalysis, DataDependenceOptions.FULL, ControlDependenceOptions.FULL);
|
||||
}
|
||||
|
|
|
@ -17,6 +17,7 @@ import java.util.Set;
|
|||
|
||||
import com.ibm.wala.ipa.callgraph.CGNode;
|
||||
import com.ibm.wala.ipa.callgraph.CallGraph;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerKey;
|
||||
import com.ibm.wala.ipa.modref.DelegatingExtendedHeapModel;
|
||||
|
@ -51,11 +52,11 @@ public class CISlicer {
|
|||
*/
|
||||
private final Graph<Statement> depGraph;
|
||||
|
||||
public CISlicer(CallGraph cg, PointerAnalysis pa, DataDependenceOptions dOptions, ControlDependenceOptions cOptions) {
|
||||
public CISlicer(CallGraph cg, PointerAnalysis<InstanceKey> pa, DataDependenceOptions dOptions, ControlDependenceOptions cOptions) {
|
||||
this(cg, pa, ModRef.make(), dOptions, cOptions);
|
||||
}
|
||||
|
||||
public CISlicer(CallGraph cg, PointerAnalysis pa, ModRef modRef, DataDependenceOptions dOptions, ControlDependenceOptions cOptions)
|
||||
public CISlicer(CallGraph cg, PointerAnalysis<InstanceKey> pa, ModRef modRef, DataDependenceOptions dOptions, ControlDependenceOptions cOptions)
|
||||
throws IllegalArgumentException {
|
||||
if (dOptions == null) {
|
||||
throw new IllegalArgumentException("dOptions == null");
|
||||
|
@ -73,7 +74,7 @@ public class CISlicer {
|
|||
|
||||
}
|
||||
|
||||
public CISlicer(final SDG sdg, final PointerAnalysis pa, final ModRef modRef) {
|
||||
public CISlicer(final SDG sdg, final PointerAnalysis<InstanceKey> pa, final ModRef modRef) {
|
||||
Map<Statement, Set<PointerKey>> mod = scanForMod(sdg, pa, modRef);
|
||||
Map<Statement, Set<PointerKey>> ref = scanForRef(sdg, pa, modRef);
|
||||
|
||||
|
@ -93,14 +94,14 @@ public class CISlicer {
|
|||
/**
|
||||
* Compute the set of pointer keys each statement mods
|
||||
*/
|
||||
public static Map<Statement, Set<PointerKey>> scanForMod(SDG sdg, PointerAnalysis pa) {
|
||||
public static Map<Statement, Set<PointerKey>> scanForMod(SDG sdg, PointerAnalysis<InstanceKey> pa) {
|
||||
return scanForMod(sdg, pa, false, ModRef.make());
|
||||
}
|
||||
|
||||
/**
|
||||
* Compute the set of pointer keys each statement refs
|
||||
*/
|
||||
public static Map<Statement, Set<PointerKey>> scanForRef(SDG sdg, PointerAnalysis pa) {
|
||||
public static Map<Statement, Set<PointerKey>> scanForRef(SDG sdg, PointerAnalysis<InstanceKey> pa) {
|
||||
if (sdg == null) {
|
||||
throw new IllegalArgumentException("null sdg");
|
||||
}
|
||||
|
@ -110,7 +111,7 @@ public class CISlicer {
|
|||
/**
|
||||
* Compute the set of pointer keys each statement mods
|
||||
*/
|
||||
public static Map<Statement, Set<PointerKey>> scanForMod(SDG sdg, PointerAnalysis pa, ModRef modRef) {
|
||||
public static Map<Statement, Set<PointerKey>> scanForMod(SDG sdg, PointerAnalysis<InstanceKey> pa, ModRef modRef) {
|
||||
return scanForMod(sdg, pa, false, modRef);
|
||||
}
|
||||
|
||||
|
@ -118,7 +119,7 @@ public class CISlicer {
|
|||
* Compute the set of pointer keys each statement mods. Be careful to avoid eager PDG construction here! That means .. don't
|
||||
* iterate over SDG statements!
|
||||
*/
|
||||
public static Map<Statement, Set<PointerKey>> scanForMod(SDG sdg, PointerAnalysis pa, boolean ignoreAllocHeapDefs, ModRef modRef) {
|
||||
public static Map<Statement, Set<PointerKey>> scanForMod(SDG sdg, PointerAnalysis<InstanceKey> pa, boolean ignoreAllocHeapDefs, ModRef modRef) {
|
||||
if (pa == null) {
|
||||
throw new IllegalArgumentException("null pa");
|
||||
}
|
||||
|
@ -146,7 +147,7 @@ public class CISlicer {
|
|||
* Compute the set of PointerKeys each statement refs.Be careful to avoid eager PDG construction here! That means .. don't iterate
|
||||
* over SDG statements!
|
||||
*/
|
||||
public static Map<Statement, Set<PointerKey>> scanForRef(SDG sdg, PointerAnalysis pa, ModRef modRef) {
|
||||
public static Map<Statement, Set<PointerKey>> scanForRef(SDG sdg, PointerAnalysis<InstanceKey> pa, ModRef modRef) {
|
||||
if (pa == null) {
|
||||
throw new IllegalArgumentException("null pa");
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
package com.ibm.wala.ipa.slicer.thin;
|
||||
|
||||
import com.ibm.wala.ipa.callgraph.CallGraph;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis;
|
||||
import com.ibm.wala.ipa.modref.ModRef;
|
||||
import com.ibm.wala.ipa.slicer.Slicer.ControlDependenceOptions;
|
||||
|
@ -29,11 +30,11 @@ import com.ibm.wala.ipa.slicer.Slicer.DataDependenceOptions;
|
|||
*/
|
||||
public class ThinSlicer extends CISlicer {
|
||||
|
||||
public ThinSlicer(CallGraph cg, PointerAnalysis pa) {
|
||||
public ThinSlicer(CallGraph cg, PointerAnalysis<InstanceKey> pa) {
|
||||
this(cg, pa, ModRef.make());
|
||||
}
|
||||
|
||||
public ThinSlicer(CallGraph cg, PointerAnalysis pa, ModRef modRef) {
|
||||
public ThinSlicer(CallGraph cg, PointerAnalysis<InstanceKey> pa, ModRef modRef) {
|
||||
super(cg, pa, modRef, DataDependenceOptions.NO_HEAP, ControlDependenceOptions.NONE);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -54,7 +54,7 @@ import com.ibm.wala.util.intset.OrdinalSetMapping;
|
|||
*/
|
||||
public class PaPanel extends JSplitPane {
|
||||
|
||||
protected final PointerAnalysis<? extends InstanceKey> pa;
|
||||
protected final PointerAnalysis<InstanceKey> pa;
|
||||
protected final CallGraph cg;
|
||||
|
||||
private JTextField fullName;
|
||||
|
@ -66,7 +66,7 @@ public class PaPanel extends JSplitPane {
|
|||
private MutableMapping<List<InstanceFieldPointerKey>> instanceKeyIdToInstanceFieldPointers = MutableMapping.<List<InstanceFieldPointerKey>> make();
|
||||
|
||||
|
||||
public PaPanel(CallGraph cg, PointerAnalysis<? extends InstanceKey> pa) {
|
||||
public PaPanel(CallGraph cg, PointerAnalysis<InstanceKey> pa) {
|
||||
super(JSplitPane.HORIZONTAL_SPLIT);
|
||||
|
||||
this.pa = pa;
|
||||
|
@ -166,7 +166,7 @@ public class PaPanel extends JSplitPane {
|
|||
|
||||
}
|
||||
|
||||
private void initDataStructures(PointerAnalysis pa) {
|
||||
private void initDataStructures(PointerAnalysis<InstanceKey> pa) {
|
||||
HeapGraph heapGraph = pa.getHeapGraph();
|
||||
OrdinalSetMapping<InstanceKey> instanceKeyMapping = pa.getInstanceKeyMapping();
|
||||
for (Object n : heapGraph){
|
||||
|
|
|
@ -18,6 +18,7 @@ import javax.swing.JTabbedPane;
|
|||
import javax.swing.UIManager;
|
||||
|
||||
import com.ibm.wala.ipa.callgraph.CallGraph;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis;
|
||||
|
||||
/**
|
||||
|
@ -31,7 +32,7 @@ public class WalaViewer extends JFrame {
|
|||
protected static final String DefaultMutableTreeNode = null;
|
||||
|
||||
|
||||
public WalaViewer(CallGraph cg, PointerAnalysis pa) {
|
||||
public WalaViewer(CallGraph cg, PointerAnalysis<InstanceKey> pa) {
|
||||
setNativeLookAndFeel();
|
||||
|
||||
JTabbedPane tabbedPane = new JTabbedPane();
|
||||
|
@ -51,7 +52,7 @@ public class WalaViewer extends JFrame {
|
|||
setVisible(true);
|
||||
}
|
||||
|
||||
protected PaPanel createPaPanel(CallGraph cg, PointerAnalysis pa) {
|
||||
protected PaPanel createPaPanel(CallGraph cg, PointerAnalysis<InstanceKey> pa) {
|
||||
return new PaPanel(cg, pa);
|
||||
}
|
||||
|
||||
|
|
|
@ -24,6 +24,7 @@ import com.ibm.wala.ipa.callgraph.AnalysisScope;
|
|||
import com.ibm.wala.ipa.callgraph.CallGraph;
|
||||
import com.ibm.wala.ipa.callgraph.Entrypoint;
|
||||
import com.ibm.wala.ipa.callgraph.impl.Util;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis;
|
||||
import com.ibm.wala.ipa.cha.ClassHierarchy;
|
||||
import com.ibm.wala.util.CancelException;
|
||||
|
@ -92,7 +93,7 @@ public class SWTPointsTo {
|
|||
// //
|
||||
com.ibm.wala.ipa.callgraph.CallGraphBuilder builder = Util.makeVanillaZeroOneCFABuilder(options, new AnalysisCache(),cha, scope, null, null);
|
||||
CallGraph cg = builder.makeCallGraph(options,null);
|
||||
PointerAnalysis pointerAnalysis = builder.getPointerAnalysis();
|
||||
PointerAnalysis<InstanceKey> pointerAnalysis = builder.getPointerAnalysis();
|
||||
|
||||
System.err.println(pointerAnalysis);
|
||||
|
||||
|
|
Loading…
Reference in New Issue