package jqian.sootex; import java.util.*; import jqian.util.*; import soot.*; /** * Some already known side-effect free methods. * Use this information can save a lot of analysis time, especially for the library methods. * TODO Experiment */ public class SideEffectFreeMethods { private Set<SootMethod> _sideEffectFreeMethods; private Set<SootClass> _sideEffectFreeClasses; private Set<String> _sideEffectFreePkgs; /**Check whether the method is a side effect free library method.*/ public boolean isSideEffectFreeMethod(SootMethod m){ if(_sideEffectFreeMethods.contains(m)){ return true; } SootClass c=m.getDeclaringClass(); String pkgName = c.getPackageName(); if(_sideEffectFreeClasses.contains(c) || _sideEffectFreePkgs.contains(pkgName)){ return true; } return false; } public String toString(){ String s = "Side effect free library methods\n"; s += CollectionUtils.toString(_sideEffectFreeMethods.iterator(),"\n"); s += "\nSide effect free library classes\n"; s += CollectionUtils.toString(_sideEffectFreeClasses.iterator(),"\n"); s += "\nSide effect free library packages\n"; s += CollectionUtils.toString(_sideEffectFreePkgs.iterator(),"\n"); return s; } }