package ru.csu.stan.java.cfg.automaton; import ru.csu.stan.java.cfg.automaton.base.ContextBase; import ru.csu.stan.java.cfg.jaxb.Project; import ru.csu.stan.java.classgen.automaton.IContext; import ru.csu.stan.java.classgen.handlers.NodeAttributes; import ru.csu.stan.java.classgen.util.CompilationUnit; /** * Состояние анализа компилируемого файла. * Собрает всю информацию внутри файла. * * @author mzubov * */ class CompilationUnitContext extends ContextBase { private static final String FILENAME_ATTRIBUTE = "filename"; private CompilationUnit compilationUnit = new CompilationUnit(); CompilationUnitContext(ContextBase previousState) { super(previousState); } @Override public IContext<Project> getNextState(IContext<Project> context, String eventName) { if ("import".equals(eventName)) return new ImportContext(this, compilationUnit); if ("package".equals(eventName)) return new PackageContext(this, compilationUnit); if ("class".equals(eventName)) return new ClassContext(this, compilationUnit); return this; } @Override public void processTag(String name, NodeAttributes attrs) { if ("compilation_unit".equals(name)){ compilationUnit.setFilename(attrs.getStringAttribute(FILENAME_ATTRIBUTE)); } } @Override public void finish(String eventName) { if ("compilation_unit".equals(eventName)){ getImportRegistry().addCompilationUnit(compilationUnit); } } @Override public ContextBase getPreviousState(String eventName) { if ("compilation_unit".equals(eventName)) return getUpperState(); else return this; } }