package org.overture.codegen.vdm2cpp.stdlib; 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.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.AExternalTypeCG; import org.overture.codegen.vdm2cpp.DependencyManager; public class DependencyAnalyser extends DepthFirstAnalysisAdaptorQuestion<DependencyManager> { @Override public void inAClassTypeCG(AClassTypeCG node, DependencyManager question) throws AnalysisException { question.addTargetLanguageType("shared_ptr", "std", "memory"); question.addTargetLanguageType("vector", "std", "vector"); question.addTargetLanguageType("set", "std", "set"); question.addTargetLanguageType("map", "std", "map"); question.addTargetLanguageType("vdm_types", "vdm", "vdm_types.hpp"); question.addTargetLanguageType("vdm", "vdm", "vdm.hpp"); question.addClassType(node.getName(), node.getName()); } @Override public void inAExternalTypeCG(AExternalTypeCG node, DependencyManager question) throws AnalysisException { // TODO Auto-generated method stub question.addTargetLanguageType(node.getName(), "", node.getName()+".hpp"); super.inAExternalTypeCG(node, question); } @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 { // TODO Auto-generated method stub 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()); } } } }