package nl.uva.se.ql.typechecking; import nl.uva.se.ql.ast.expression.variable.Reference; import nl.uva.se.ql.ast.form.Form; import nl.uva.se.ql.ast.statement.CalculatedQuestion; import nl.uva.se.ql.ast.statement.Question; public class DependencyResolver extends AbstractResolver { private DependencyTable dependencies; private SymbolTable symbols; private Question currentContext; private DependencyResolver(SymbolTable symbols) { dependencies = new DependencyTable(); this.symbols = symbols; } public static DependencyTable resolve(Form form, SymbolTable symbols) { DependencyResolver resolver = new DependencyResolver(symbols); form.accept(resolver); return resolver.dependencies; } @Override public void visit(CalculatedQuestion calculatedQuestion) { currentContext = calculatedQuestion; calculatedQuestion.getExpression().accept(this); currentContext = null; } @Override public Void visit(Reference reference) { dependencies.addDependency(currentContext, symbols.getQuestionForSymbol(reference.getName())); return null; } }