/** * 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); } }