package test; import java.util.*; import jqian.sootex.sideeffect.FieldScaner; import soot.*; /** * */ public class FieldScanerTest implements AllTestCases { static void test( String methodSignature ){ FieldScaner.v(); SootMethod method = Scene.v().getMethod(methodSignature); Test.out.println(method); testFieldAccess(method); } /** Test the accessed fields. */ static void testFieldAccess(SootMethod m){ Set<SootField> instFields = new HashSet<SootField>(); Set<SootField> globals = new HashSet<SootField>(); Set<ArrayType> arrays = new HashSet<ArrayType>(); System.out.println("\nDefined instance fields:"); Test.printCollection(FieldScaner.v().getModInstanceFields(m).iterator(),"\n"); System.out.println("\nUsed instance fields:"); Test.printCollection(FieldScaner.v().getUseInstanceFields(m).iterator(),"\n"); FieldScaner.v().getAccessedInstanceFields(m,instFields); System.out.println("\nAccessed instance fields:"); Test.printCollection(instFields.iterator(),"\n"); System.out.println("\nDefined static fields:"); Set<SootField> modGlobals = FieldScaner.v().getModGlobals(m); //testSet(modGlobals); Test.printCollection(modGlobals.iterator(),"\n"); System.out.println("\nUsed static fields:"); Test.printCollection(FieldScaner.v().getUseGlobals(m).iterator(),"\n"); FieldScaner.v().getAccessedGlobals(m,globals); System.out.println("\nAccessed globals:"); Test.printCollection(globals.iterator(),"\n"); System.out.println("\nDefined array types:"); Test.printCollection(FieldScaner.v().getModArrayTypes(m).iterator(),"\n"); System.out.println("\nUsed array types:"); Test.printCollection(FieldScaner.v().getUseArrayTypes(m).iterator(),"\n"); FieldScaner.v().getAccessedArrayTypes(m,arrays); System.out.println("\nAccessed array types:"); Test.printCollection(arrays.iterator(),"\n"); System.out.println(); } static void testSet(Set<SootField> set){ for(SootField f: set){ if(f.getName().equals("_x") || f.getName().equals("_zar")){ throw new RuntimeException(); } } } /** * Two string input parameters: * Usage: java FieldScanerTest <checked_method> * Examples: * java FieldScanerTest "<test.sideeffect.cases.SideEffectCase: void testFieldScaner()>" */ public static void main(String[] args){ Test.loadConfig("/test/sideeffect/config.xml"); Test.loadClasses(true); Test.buildCHACallGraph(); Test.simplifyCallGraph(); if(args.length>=1){ test(args[0]); } } }