/**
  * Checks whether the given statement is the end of an implicit flow. If this is the case, then
  * the corresponding if statement which is the start of this implicit flow will be removed from
  * the program counter in the outgoing locals map. Note, that the method will not change the
  * incoming locals map.
  *
  * @param statement Statement for which should be checked whether it is the end of an implicit
  *     flow.
  * @param in Current incoming map of the local variables.
  * @param out Current outgoing map of the local variables.
  */
 private void checkEndOfImplicitFlow(Stmt statement, LocalsMap in, LocalsMap out) {
   List<IfStmt> ifStmts = new ArrayList<IfStmt>(in.getProgramCounter().keySet());
   for (IfStmt ifStmt : ifStmts) {
     if (getContainer().postDomSetOfStmtContainsS(ifStmt, statement)) {
       out.removeProgramCounterLevel(ifStmt);
     }
   }
 }
 /**
  * Creates a copy of the <code>source</code> flow object, i.e. the locals map, in <code>dest
  * </code>.
  *
  * @param source The locals map that should be copied in the given outgoing map.
  * @param dest The locals map in which the state of the first given locals map should be copied.
  * @see soot.toolkits.scalar.AbstractFlowAnalysis#copy(java.lang.Object, java.lang.Object)
  */
 @Override
 protected void copy(LocalsMap source, LocalsMap dest) {
   dest.clear();
   dest.addAll(source.getExtendedLocals(), source.getProgramCounter());
 }