package org.overture.pog.visitors; import java.util.LinkedList; import java.util.List; import org.overture.ast.analysis.AnalysisException; import org.overture.ast.analysis.AnswerAdaptor; import org.overture.ast.expressions.AApplyExp; import org.overture.ast.expressions.AFieldExp; import org.overture.ast.expressions.AVariableExp; import org.overture.ast.expressions.PExp; import org.overture.ast.intf.lex.ILexNameToken; import org.overture.ast.node.INode; import org.overture.ast.statements.AFieldStateDesignator; import org.overture.ast.statements.AIdentifierStateDesignator; import org.overture.ast.statements.AMapSeqStateDesignator; public class StateDesignatorToExpVisitor extends AnswerAdaptor<PExp> { @Override public PExp caseAFieldStateDesignator(AFieldStateDesignator node) throws AnalysisException { // pack this with the output of the visitor recursive calls. PExp value = node.getObject().apply(this); AFieldExp fieldExp = new AFieldExp(); fieldExp.setObject(value.clone()); fieldExp.setField(node.getField().clone()); // Not 100% sure these 2 match fieldExp.setMemberName(node.getObjectfield().clone()); fieldExp.setType(node.getType().clone()); return fieldExp; } @Override public PExp caseAIdentifierStateDesignator(AIdentifierStateDesignator node) throws AnalysisException { ILexNameToken nameTok = node.getName().clone(); AVariableExp varExp = new AVariableExp(); varExp.setName(nameTok); varExp.setOriginal(nameTok.getFullName()); return varExp; } @Override public PExp caseAMapSeqStateDesignator(AMapSeqStateDesignator node) throws AnalysisException { AApplyExp applyExp = new AApplyExp(); applyExp.setRoot(node.getMapseq().apply(this).clone()); List<PExp> args = new LinkedList<PExp>(); args.add(node.getExp().clone()); applyExp.setArgs(args); return applyExp; } @Override public PExp createNewReturnValue(INode node) { assert false : "Should not happen"; return null; } @Override public PExp createNewReturnValue(Object node) { assert false : "Should not happen"; return null; } }