type generalization

This commit is contained in:
Julian Dolby 2014-02-08 22:52:19 -05:00 committed by Michael Heilmann
parent 0cb23266c9
commit dbd9c60d4f
9 changed files with 17 additions and 17 deletions

View File

@ -257,7 +257,7 @@ public class CallGraphTest extends WalaTestCase {
PointerAnalysis pa = builder.getPointerAnalysis();
CGNode mainMethod = AbstractPtrTest.findMainMethod(cg);
PointerKey keyToQuery = AbstractPtrTest.getParam(mainMethod, "testThisVar", pa.getHeapModel());
OrdinalSet<InstanceKey> pointsToSet = pa.getPointsToSet(keyToQuery);
OrdinalSet<? extends InstanceKey> pointsToSet = pa.getPointsToSet(keyToQuery);
Assert.assertEquals(1, pointsToSet.size());
}

View File

@ -70,7 +70,7 @@ public class MultiDimArrayTest extends WalaTestCase {
CGNode node = findDoNothingNode(cg);
PointerKey pk = pa.getHeapModel().getPointerKeyForLocal(node, 1);
OrdinalSet<InstanceKey> ptsTo = pa.getPointsToSet(pk);
OrdinalSet<? extends InstanceKey> ptsTo = pa.getPointsToSet(pk);
Assert.assertEquals(1, ptsTo.size());
}

View File

@ -78,8 +78,8 @@ public class TypeBasedArrayAliasTest extends WalaTestCase {
}
private static boolean mayAliased(PointerKey pk1, PointerKey pk2, PointerAnalysis pa) {
OrdinalSet<InstanceKey> ptsTo1 = pa.getPointsToSet(pk1);
OrdinalSet<InstanceKey> ptsTo2 = pa.getPointsToSet(pk2);
OrdinalSet<? extends InstanceKey> ptsTo1 = pa.getPointsToSet(pk1);
OrdinalSet<? extends InstanceKey> ptsTo2 = pa.getPointsToSet(pk2);
boolean foundIntersection = false;
outer: for (InstanceKey i : ptsTo1) {
for (InstanceKey j : ptsTo2) {

View File

@ -60,10 +60,10 @@ public class ZeroLengthArrayTest {
cha.resolveMethod(MethodReference.findOrCreate(
TypeReference.findOrCreate(ClassLoaderReference.Application, TestConstants.ZERO_LENGTH_ARRAY_MAIN),
Selector.make("main([Ljava/lang/String;)V"))), Everywhere.EVERYWHERE);
OrdinalSet<InstanceKey> pointsToSet = pa.getPointsToSet(heapModel.getPointerKeyForLocal(mainNode, 4));
OrdinalSet<? extends InstanceKey> pointsToSet = pa.getPointsToSet(heapModel.getPointerKeyForLocal(mainNode, 4));
Assert.assertEquals(1, pointsToSet.size());
InstanceKey arrayKey = pointsToSet.iterator().next();
OrdinalSet<InstanceKey> arrayContents = pa.getPointsToSet(heapModel.getPointerKeyForArrayContents(arrayKey));
OrdinalSet<? extends InstanceKey> arrayContents = pa.getPointsToSet(heapModel.getPointerKeyForArrayContents(arrayKey));
System.err.println(arrayContents);
Assert.assertEquals(0, arrayContents.size());

View File

@ -174,7 +174,7 @@ public class CompareToZeroOneCFADriver {
LocalPointerKey pk = (LocalPointerKey) heapModel.getPointerKeyForLocal(node, i);
LocalPointerKey oldPk = (LocalPointerKey) CallGraphMapUtil.mapPointerKey(pk, cg, oldCG, heapModel);
Collection<InstanceKey> p2set = dmp.getPointsTo(pk);
OrdinalSet<InstanceKey> otherP2Set = pa.getPointsToSet(oldPk);
OrdinalSet<? extends InstanceKey> otherP2Set = pa.getPointsToSet(oldPk);
System.err.println(("OLD POINTS-TO " + otherP2Set));
for (InstanceKey key : otherP2Set) {
if (knownBug(key)) {

View File

@ -256,8 +256,8 @@ public class SimpleThreadEscapeAnalysis extends AbstractAnalysisEngine {
//
for (Iterator<PointerKey> rts = escapeAnalysisRoots.iterator(); rts.hasNext();) {
PointerKey root = rts.next();
OrdinalSet<InstanceKey> objects = pa.getPointsToSet(root);
for (Iterator<InstanceKey> objs = objects.iterator(); objs.hasNext();) {
OrdinalSet<? extends InstanceKey> objects = pa.getPointsToSet(root);
for (Iterator<? extends InstanceKey> objs = objects.iterator(); objs.hasNext();) {
InstanceKey obj = (InstanceKey) objs.next();
escapingInstanceKeys.add(obj);
}
@ -276,8 +276,8 @@ public class SimpleThreadEscapeAnalysis extends AbstractAnalysisEngine {
if (type.isArrayClass()) {
if (((ArrayClass) type).getElementClass() != null) {
PointerKey fk = heapModel.getPointerKeyForArrayContents(key);
OrdinalSet<InstanceKey> fobjects = pa.getPointsToSet(fk);
for (Iterator<InstanceKey> fobjs = fobjects.iterator(); fobjs.hasNext();) {
OrdinalSet<? extends InstanceKey> fobjects = pa.getPointsToSet(fk);
for (Iterator<? extends InstanceKey> fobjs = fobjects.iterator(); fobjs.hasNext();) {
InstanceKey fobj = (InstanceKey) fobjs.next();
if (!escapingInstanceKeys.contains(fobj)) {
newKeys.add(fobj);
@ -290,8 +290,8 @@ public class SimpleThreadEscapeAnalysis extends AbstractAnalysisEngine {
IField f = (IField) fs.next();
if (f.getFieldTypeReference().isReferenceType()) {
PointerKey fk = heapModel.getPointerKeyForInstanceField(key, f);
OrdinalSet<InstanceKey> fobjects = pa.getPointsToSet(fk);
for (Iterator<InstanceKey> fobjs = fobjects.iterator(); fobjs.hasNext();) {
OrdinalSet<? extends InstanceKey> fobjects = pa.getPointsToSet(fk);
for (Iterator<? extends InstanceKey> fobjs = fobjects.iterator(); fobjs.hasNext();) {
InstanceKey fobj = (InstanceKey) fobjs.next();
if (!escapingInstanceKeys.contains(fobj)) {
newKeys.add(fobj);

View File

@ -256,10 +256,10 @@ public class BasicHeapGraph extends HeapGraph {
private int[] computeSuccNodeNumbers(Object N, NumberedNodeManager<Object> nodeManager) {
if (N instanceof PointerKey) {
PointerKey P = (PointerKey) N;
OrdinalSet<InstanceKey> S = getPointerAnalysis().getPointsToSet(P);
OrdinalSet<? extends InstanceKey> S = getPointerAnalysis().getPointsToSet(P);
int[] result = new int[S.size()];
int i = 0;
for (Iterator<InstanceKey> it = S.iterator(); it.hasNext();) {
for (Iterator<? extends InstanceKey> it = S.iterator(); it.hasNext();) {
result[i] = nodeManager.getNumber(it.next());
i++;
}

View File

@ -2459,7 +2459,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo {
private boolean predHoldsForPk(PointerKey curPk, Predicate<InstanceKey> pred, PointerAnalysis pa) {
PointerKey curPkForPAHeapModel = convertToHeapModel(curPk, pa.getHeapModel());
OrdinalSet<InstanceKey> pointsToSet = pa.getPointsToSet(curPkForPAHeapModel);
OrdinalSet<? extends InstanceKey> pointsToSet = pa.getPointsToSet(curPkForPAHeapModel);
for (InstanceKey ik : pointsToSet) {
if (!pred.test(ik)) {
return false;

View File

@ -27,7 +27,7 @@ public interface PointerAnalysis {
* @return Set of InstanceKey, representing the instance abstractions that define
* the points-to set computed for the pointer key
*/
OrdinalSet<InstanceKey> getPointsToSet(PointerKey key);
OrdinalSet<? extends InstanceKey> getPointsToSet(PointerKey key);
/**
* @return an Object that determines how to model abstract locations in the heap.