package test;
import java.util.*;
import jqian.sootex.location.Location;
import jqian.sootex.location.HeapAbstraction;
import jqian.sootex.ptsto.*;
import jqian.sootex.sideeffect.*;
import soot.*;
/**
*/
public class SideEffectTest implements AllTestCases{
static void test(ISideEffectAnalysis sideEffect, String methodSignature){
SootMethod method = Scene.v().getMethod(methodSignature);
Test.out.println("\nTesting method: " + method);
testOnLocations(sideEffect, method);
}
static void testOnLocations(ISideEffectAnalysis sideEffect,SootMethod m){
Collection<Location> modLocs = sideEffect.getModHeapLocs(m);
Test.out.print("\nModification set: ");
Test.printCollection(modLocs.iterator(),"\n");
Collection<Location> useLocs = sideEffect.getUseHeapLocs(m);
Test.out.print("\nUse set: ");
Test.printCollection(useLocs.iterator(),"\n");
useLocs = sideEffect.getModGlobals(m);
Test.out.print("\nModified gloal set: ");
Test.printCollection(useLocs.iterator(),"\n");
useLocs = sideEffect.getUseGlobals(m);
Test.out.print("\nUsed gloal set: ");
Test.printCollection(useLocs.iterator(),"\n");
}
@SuppressWarnings({ "rawtypes" })
public static ISideEffectAnalysis loadSideEffector(){
//GlobalPtsToQuery query = new GlobalPtsToQuery.Default(SparkPtsToQuery.v());
//GlobalPtsToQuery query = new GlobalPtsToQuery.Default(NaivePtsToQuery.v());
IPtsToQuery query = new TypeBasedPtsToQuery(false);
//SootMethod e = Scene.v().getEntryPoints().get(0);
//Collection entries = new LinkedList();
//entries.add(e);
Collection entries = Scene.v().getEntryPoints();
HeapAbstraction opt = HeapAbstraction.FIELD_SENSITIVE;
//MemoryDistinguishment opt = MemoryDistinguishment.FIELD_BASED;
//MemoryDistinguishment opt = MemoryDistinguishment.TYPE_BASED;
//MemoryDistinguishment opt = MemoryDistinguishment.NO_DISTINGUISH;
SideEffectAnalysis se = new SideEffectAnalysis(query,entries, opt);
se.build();
return se;
}
public static void main(String[] args) {
Test.loadConfig("/test/config.xml");
Test.loadClasses(true);
//SootUtils.doSparkPointsToAnalysis(Collections.EMPTY_MAP);
Test.doFastSparkPointsToAnalysis();
//ISideEffector sideEffect = Test.loadSideEffector();
ISideEffectAnalysis sideEffect = loadSideEffector();
String method = SideEffect.SIDE_EFFECT_CASES[2];
test(sideEffect, method);
}
}