package jqian.sootex.dependency;
import java.util.Collection;
import soot.SootMethod;
import soot.Unit;
import soot.jimple.toolkits.callgraph.ReachableMethods;
/**
*
*/
public class CombinedDependencyQuery implements IDependencyQuery {
private IDependencyQuery _left;
private IDependencyQuery _right;
private ReachableMethods _forLeft;
public CombinedDependencyQuery(IDependencyQuery left, IDependencyQuery right, ReachableMethods forLeft){
this._left = left;
this._right = right;
this._forLeft = forLeft;
}
public Collection<Unit> getCtrlDependences(SootMethod m, Unit u) {
if(_forLeft.contains(m)){
return _left.getCtrlDependences(m, u);
}
else{
return _right.getCtrlDependences(m, u);
}
}
public Collection<Unit> getWRDependences(SootMethod m, Unit u) {
if(_forLeft.contains(m)){
return _left.getWRDependences(m, u);
}
else{
return _right.getWRDependences(m, u);
}
}
public Collection<Unit> getRWDependences(SootMethod m, Unit u) {
if(_forLeft.contains(m)){
return _left.getRWDependences(m, u);
}
else{
return _right.getRWDependences(m, u);
}
}
public Collection<Unit> getWWDependences(SootMethod m, Unit u) {
if(_forLeft.contains(m)){
return _left.getWWDependences(m, u);
}
else{
return _right.getWWDependences(m, u);
}
}
public void release(SootMethod m) {
_left.release(m);
_right.release(m);
}
}