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.cfg.util.scope.VariableFromScope;
import ru.csu.stan.java.classgen.automaton.IContext;
import ru.csu.stan.java.classgen.handlers.NodeAttributes;
/**
*
* @author mz
*
*/
public class VartypeContext extends ContextBase {
private VariableFromScope var;
private String typeName = "";
boolean parameterized = false;
boolean arguments = false;
protected VartypeContext(ContextBase previousState, VariableFromScope scopedVar) {
super(previousState);
this.var = scopedVar;
}
@Override
public IContext<Project> getPreviousState(String eventName) {
if ("vartype".equals(eventName))
return getUpperState();
else
return this;
}
@Override
public IContext<Project> getNextState(IContext<Project> context, String eventName) {
return this;
}
@Override
public void processTag(String name, NodeAttributes attrs) {
if ("parameterized_type".equals(name))
parameterized = true;
if ("arguments".equals(name))
arguments = true;
if (!arguments){
if ("identifier".equals(name) || "member_select".equals(name) || "primitive_type".equals(name))
if (typeName.isEmpty())
typeName = attrs.getNameAttribute();
else
typeName = attrs.getNameAttribute() + "." + typeName;
}
}
@Override
public void finish(String eventName) {
if ("vartype".equals(eventName))
var.setType(typeName);
}
}