/**
  * Given the merge of the <code>out</code> sets, compute the <code>in</code> set for <code>d
  * </code>.
  *
  * <p>Processes the analysis for the given {@link Unit}, i.e. checks the end of an implicit flow
  * for the given unit and after that tries to apply a {@link SecurityLevelStmtSwitch} switch to
  * the statement, i.e. calculates or updates the <em>security levels</em> of the statement
  * components to check for security violations.
  *
  * @param in Current incoming map of the local variables for the given unit.
  * @param d The current unit which should be checked for security violations.
  * @param out Current outgoing map of the local variables for the given unit.
  * @see soot.toolkits.scalar.FlowAnalysis#flowThrough(java.lang.Object, java.lang.Object,
  *     java.lang.Object)
  * @see SecurityLevelStmtSwitch
  */
 @Override
 protected void flowThrough(LocalsMap in, Unit d, LocalsMap out) {
   copy(in, out);
   Stmt stmt = (Stmt) d;
   getAnalyzedEnvironment().setStmt(stmt);
   checkEndOfImplicitFlow(stmt, in, out);
   try {
     SecurityLevelStmtSwitch stmtSwitch =
         new SecurityLevelStmtSwitch(getAnalyzedEnvironment(), getStore(), in, out);
     stmt.apply(stmtSwitch);
   } catch (ProgramCounterException
       | EnvironmentNotFoundException
       | SwitchException
       | MethodParameterNotFoundException
       | LevelNotFoundException e) {
     throw new AnalysisException(
         getMsg(
             "exception.analysis.other.error_switch",
             stmt.toString(),
             getSignatureOfMethod(getAnalyzedEnvironment().getSootMethod()),
             getAnalyzedEnvironment().getSrcLn()),
         e);
   }
 }