/* * Copyright 2010 Pablo Arrighi, Alex Concha, Miguel Lezama for version 1. * Copyright 2013 Pablo Arrighi, Miguel Lezama, Kevin Mazet for version 2. * * This file is part of GOOL. * * GOOL is free software: you can redistribute it and/or modify it under the terms of the GNU * General Public License as published by the Free Software Foundation, version 3. * * GOOL is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License version 3 for more details. * * You should have received a copy of the GNU General Public License along with GOOL, * in the file COPYING.txt. If not, see <http://www.gnu.org/licenses/>. */ package gool.generator.objc; import gool.ast.core.ClassDef; import gool.generator.common.CodePrinter; import java.io.File; import java.io.FileNotFoundException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang.StringUtils; /** * Provides the basic functionality to generate Objective C code from a list of * GOOL classes. */ public class ObjcCodePrinter extends CodePrinter { private static final String TEMPLATE_DIR = "gool/generator/objc/templates/"; public ObjcCodePrinter(File outputDir) { super(new ObjcGenerator(), outputDir); } @Override public String getTemplateDir() { return TEMPLATE_DIR; } @Override public String getFileName(String className) { return className + ".m"; } @Override public List<File> print(ClassDef pclass) throws FileNotFoundException { if (pclass.getParentClass() != null) { pclass.setParentClass(pclass.getParentClass()); } String headerFile = processTemplate("header.vm", pclass); PrintWriter writer; File dir = new File(getOutputDir().getAbsolutePath(), StringUtils.replace(pclass.getPackageName(), ".", File.separator)); dir.mkdirs(); File classFile = new File(dir, pclass.getName() + ".h"); writer = new PrintWriter(classFile); writer.println(headerFile); writer.close(); if (pclass.isEnum() || pclass.isInterface()) { List<File> r = new ArrayList<File>(); r.add(classFile); return r; } else { return super.print(pclass); } } }