package org.overture.codegen.visitor; import java.util.LinkedList; import java.util.List; import org.overture.ast.analysis.AnalysisException; import org.overture.ast.modules.AFromModuleImports; import org.overture.ast.modules.AModuleImports; import org.overture.ast.modules.PImport; import org.overture.codegen.ir.IRInfo; import org.overture.codegen.ir.SImportIR; import org.overture.codegen.ir.SImportsIR; import org.overture.codegen.ir.declarations.AFromModuleImportsIR; import org.overture.codegen.ir.declarations.AModuleImportsIR; public class ImportsVisitorIR extends AbstractVisitorIR<IRInfo, SImportsIR> { @Override public SImportsIR caseAModuleImports(AModuleImports node, IRInfo question) throws AnalysisException { String name = node.getName() != null ? node.getName().getName() : null; AModuleImportsIR moduleImportsCg = new AModuleImportsIR(); moduleImportsCg.setName(name); for (AFromModuleImports fromModuleImport : node.getImports()) { SImportsIR fromModuleImportCg = fromModuleImport.apply(question.getImportsVisitor(), question); if (fromModuleImportCg instanceof AFromModuleImportsIR) { moduleImportsCg.getImports().add((AFromModuleImportsIR) fromModuleImportCg); } else { log.error("Expected fromModuleImportCg to be of type '" + AFromModuleImportsIR.class.getSimpleName() + "'. Got: " + fromModuleImportCg); return null; } } return moduleImportsCg; } @Override public SImportsIR caseAFromModuleImports(AFromModuleImports node, IRInfo question) throws AnalysisException { String name = node.getName() != null ? node.getName().getName() : null; AFromModuleImportsIR fromImportCg = new AFromModuleImportsIR(); fromImportCg.setName(name); for (List<PImport> sig : node.getSignatures()) { List<SImportIR> sigCg = new LinkedList<SImportIR>(); for (PImport imp : sig) { SImportIR impCg = imp.apply(question.getImportVisitor(), question); if (impCg != null) { sigCg.add(impCg); } else { return null; } } fromImportCg.getSignatures().add(sigCg); } return fromImportCg; } }