package jqian.sootex; import jqian.sootex.util.HammockCFG; import jqian.sootex.util.SootUtils; import soot.Body; import soot.SootMethod; import soot.baf.BafBody; import soot.toolkits.graph.UnitGraph; /** * TODO: ��Ҫ���̼��쳣�����Խ�����Ϊ��ȷ���쳣����. * Ŀǰ����ExceptinalUnitGraph̫�ֲ� */ public class HammockCFGProvider implements CFGProvider{ private UnitGraph[] _cfgs; public HammockCFGProvider(){ _cfgs = new UnitGraph[SootUtils.getMethodCount()]; } public UnitGraph getCFG(SootMethod m){ int id = m.getNumber(); UnitGraph cfg = _cfgs[id]; if(cfg==null){ Body body=m.getActiveBody(); if(body instanceof BafBody){ throw new RuntimeException("BafBody is not supported."); } cfg = new HammockCFG(body); _cfgs[id] = cfg; } return cfg; } public void release(SootMethod m){ int id = m.getNumber(); _cfgs[id] = null; } }