Analysis.java

package edu.udel.cis.vsl.civl.analysis.IF;

import java.io.PrintStream;
import java.util.LinkedList;
import java.util.List;

import edu.udel.cis.vsl.civl.analysis.common.AbsCallAnalyzer;
import edu.udel.cis.vsl.civl.config.IF.CIVLConfiguration;
import edu.udel.cis.vsl.civl.model.IF.statement.CallOrSpawnStatement;
import edu.udel.cis.vsl.civl.model.IF.statement.Statement;
import edu.udel.cis.vsl.civl.state.IF.State;
import edu.udel.cis.vsl.sarl.IF.SymbolicUniverse;
import edu.udel.cis.vsl.sarl.IF.expr.SymbolicExpression;

public class Analysis {

	public static final String ABS = "abs";

	public static void staticAnalysis(Statement statement,
			List<CodeAnalyzer> analyzers) {
		for (CodeAnalyzer analyzer : analyzers)
			analyzer.staticAnalysis(statement);
	}

	public static List<CodeAnalyzer> getAnalyzers(CIVLConfiguration config,
			SymbolicUniverse universe) {
		List<CodeAnalyzer> result = new LinkedList<>();

		if (config.analyzeAbs())
			result.add(new AbsCallAnalyzer(universe));
		return result;
	}

	public static void analyzeCall(List<CodeAnalyzer> analyzers, State state,
			int pid, CallOrSpawnStatement statement,
			SymbolicExpression[] arguments) {
		for (CodeAnalyzer analyzer : analyzers)
			analyzer.analyze(state, pid, statement, arguments);
	}

	public static void printResults(List<CodeAnalyzer> analyzers,
			PrintStream out) {
		for (CodeAnalyzer analyzer : analyzers)
			analyzer.printAnalysis(out);
	}
}