package jqian.sootex.ptsto;
import java.util.*;
import jqian.sootex.location.InstanceObject;
import jqian.sootex.location.Location;
import soot.*;
/**
* A type-based points-to relation query
*/
public class TypeBasedPtsToQuery implements IPtsToQuery{
private final boolean _allReachable;
public TypeBasedPtsToQuery(boolean allReachable){
TypeBasedPointsToAnalysis.v(allReachable);
_allReachable = allReachable;
}
public void getPointTos(Type type, Set<InstanceObject> pt2Set){
Set<Type> set = TypeBasedPointsToAnalysis.v(_allReachable).reachingObjects(type);
for(Type t: set){
InstanceObject o = InstanceObject.typeToObject(t);
pt2Set.add(o);
}
}
public Set<InstanceObject> getPointTos(SootMethod m, Unit stmt, Location ptr){
if(!ptr.isPointer())
return Collections.emptySet();
Set<InstanceObject> pt2Set = new HashSet<InstanceObject>();
getPointTos(ptr.getType(),pt2Set);
return pt2Set;
}
}