public void fill() { DomI domI = (DomI) doms[0]; DomM domM = (DomM) doms[1]; int numI = domI.size(); for (int iIdx = 0; iIdx < numI; iIdx++) { Unit i = (Unit)domI.get(iIdx); if(i instanceof Stmt){ Stmt s = (Stmt)i; if(s.containsInvokeExpr()){ InvokeExpr ie = s.getInvokeExpr(); if(ie instanceof JVirtualInvokeExpr || ie instanceof JInterfaceInvokeExpr){ SootMethod m = s.getInvokeExpr().getMethod(); int mIdx = domM.indexOf(m); if (mIdx >= 0) add(iIdx, mIdx); else if (Config.verbose >= 2) Messages.log(NOT_FOUND, m, SootUtilities.toLocStr(i)); } } } } }
public static boolean isVirtualInvoke(Unit q){ assert (q instanceof JInvokeStmt || q instanceof JAssignStmt); InvokeExpr ie; if (q instanceof JInvokeStmt) ie = ((JInvokeStmt)q).getInvokeExpr(); else if (q instanceof JAssignStmt) ie = ((InvokeExpr)(((JAssignStmt)q).rightBox.getValue())); else ie = null; return ie != null && ie instanceof JVirtualInvokeExpr; }
public void visit(InvokeExpr e) { if (e instanceof JVirtualInvokeExpr) { JVirtualInvokeExpr ex = (JVirtualInvokeExpr) e; add(e, ex.getBase(), ex.getMethod()); } }