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 ImportContext extends ContextBase
{
private CompilationUnit compilationUnit = new CompilationUnit();
private String currentImport;
ImportContext(ContextBase previousState, CompilationUnit compilationUnit)
{
super(previousState);
this.compilationUnit = compilationUnit;
}
@Override
public IContext<Project> getNextState(IContext<Project> context, String eventName)
{
return this;
}
@Override
public void processTag(String name, NodeAttributes attrs)
{
if ("import".equals(name))
currentImport = "";
if ("member_select".equals(name) || "identifier".equals(name))
if ("".equals(currentImport))
currentImport = attrs.getNameAttribute();
else
currentImport = attrs.getNameAttribute() + '.' + currentImport;
}
@Override
public void finish(String eventName)
{
if ("import".equals(eventName)){
compilationUnit.addImport(currentImport);
}
}
@Override
public ContextBase getPreviousState(String eventName)
{
if ("import".equals(eventName))
return getUpperState();
else
return this;
}
}