gool.generator.objc.ObjcCodePrinter.java Source code

Java tutorial

Introduction

Here is the source code for gool.generator.objc.ObjcCodePrinter.java

Source

/*
 * 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);
        }

    }

}