package org.overture.codegen.vdm2cpp.vdmtools;
import org.overture.codegen.cgast.STypeCG;
import org.overture.codegen.cgast.analysis.AnalysisException;
import org.overture.codegen.cgast.analysis.DepthFirstAnalysisAdaptorQuestion;
import org.overture.codegen.cgast.declarations.AClassDeclCG;
import org.overture.codegen.cgast.declarations.ARecordDeclCG;
import org.overture.codegen.cgast.declarations.ATypeDeclCG;
import org.overture.codegen.cgast.expressions.AExplicitVarExpCG;
import org.overture.codegen.cgast.name.ATypeNameCG;
import org.overture.codegen.cgast.statements.APlainCallStmCG;
import org.overture.codegen.cgast.types.AClassTypeCG;
import org.overture.codegen.cgast.types.AMapMapTypeCG;
import org.overture.codegen.cgast.types.ASeqSeqTypeCG;
import org.overture.codegen.cgast.types.ASetSetTypeCG;
import org.overture.codegen.vdm2cpp.DependencyManager;
public class DependencyAnalyser extends DepthFirstAnalysisAdaptorQuestion<DependencyManager>
{
@Override
public void inAClassTypeCG(AClassTypeCG node, DependencyManager question)
throws AnalysisException {
question.addTargetLanguageType("metaiv", "", "metaiv.h");
question.addTargetLanguageType("cg", "", "cg.h");
question.addTargetLanguageType("cg_aux", "", "cg_aux.h");
question.addTargetLanguageType("CGBase", "", "CGBase.hpp");
question.addTargetLanguageType("VDMExtraUtils","vdm", "VDMExtraUtils.h");
question.addClassType(node.getName(), node.getName());
}
@Override
public void inATypeNameCG(ATypeNameCG node, DependencyManager question)
throws AnalysisException
{
if(node.getDefiningClass() != null)
{
question.addClassType(node.getDefiningClass(), node.getName());
}
else
{
// if there is no defining class then it is the class itself
question.addClassType(node.getName(), node.getName());
}
}
@Override
public void inAPlainCallStmCG(APlainCallStmCG node,
DependencyManager question) throws AnalysisException {
if(node.getClassType() instanceof AClassTypeCG)
{
AClassTypeCG cls = (AClassTypeCG)node.getClassType();
String name = cls.getName();
question.addClassType(name,name);
}
}
@Override
public void inAExplicitVarExpCG(AExplicitVarExpCG node, DependencyManager question) throws AnalysisException {
STypeCG class_type = node.getClassType();
if(class_type != null)
{
if(class_type instanceof AClassTypeCG)
{
AClassTypeCG cg = (AClassTypeCG) class_type;
question.addClassType(cg.getName(),cg.getName());
}
}
}
}