package org.uva.sea.ql.checker;
import java.util.ArrayList;
import java.util.List;
import org.uva.sea.ql.ast.form.Form;
import org.uva.sea.ql.checker.exception.error.CyclicDependencyError;
import org.uva.sea.ql.checker.exception.error.Error;
import org.uva.sea.ql.checker.helper.Dependency;
import org.uva.sea.ql.checker.visitor.StmtVisitorDependencies;
public class CheckCyclicDependency {
private List<Dependency> dependencies;
private List<Error> errors;
public CheckCyclicDependency(Form form){
StmtVisitorDependencies sv = new StmtVisitorDependencies(form);
dependencies = sv.getDependencies();
errors = new ArrayList<Error>();
}
public List<Error> getCyclicDependencies(){
for(Dependency original : dependencies){
Dependency flipped = new Dependency(original);
flipped.flip();
for(Dependency control : dependencies){
if(control.equals(flipped)){
errors.add(new CyclicDependencyError(original));
}
}
}
return errors;
}
public boolean hasErrors() {
return !errors.isEmpty();
}
public List<Error> getErrors() {
return errors;
}
}