spoon.support.compiler.jdt.FileCompilerConfig.java Source code

Java tutorial

Introduction

Here is the source code for spoon.support.compiler.jdt.FileCompilerConfig.java

Source

/**
 * Copyright (C) 2006-2016 INRIA and contributors
 * Spoon - http://spoon.gforge.inria.fr/
 *
 * This software is governed by the CeCILL-C License under French law and
 * abiding by the rules of distribution of free software. You can use, modify
 * and/or redistribute the software under the terms of the CeCILL-C license as
 * circulated by CEA, CNRS and INRIA at http://www.cecill.info.
 *
 * This program 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 CeCILL-C License for more details.
 *
 * The fact that you are presently reading this means that you have had
 * knowledge of the CeCILL-C license and that you accept its terms.
 */
package spoon.support.compiler.jdt;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import spoon.SpoonException;
import spoon.SpoonModelBuilder;
import spoon.compiler.SpoonFile;
import spoon.compiler.SpoonFolder;

import org.apache.commons.io.IOUtils;
import org.eclipse.jdt.internal.compiler.batch.CompilationUnit;

public class FileCompilerConfig implements SpoonModelBuilder.InputType {

    /**
     * Default implementation of which initializes {@link JDTBatchCompiler} by all sources and templates registered in {@link SpoonModelBuilder}
     */
    public static final SpoonModelBuilder.InputType INSTANCE = new FileCompilerConfig((List<SpoonFile>) null) {
        @Override
        public List<SpoonFile> getFiles(JDTBatchCompiler compiler) {
            JDTBasedSpoonCompiler jdtCompiler = compiler.getJdtCompiler();
            List<SpoonFile> files = new ArrayList<>();
            files.addAll(jdtCompiler.sources.getAllJavaFiles());
            files.addAll(jdtCompiler.templates.getAllJavaFiles());
            return files;
        }
    };

    private final List<SpoonFile> files;

    public FileCompilerConfig(List<SpoonFile> files) {
        this.files = files;
    }

    public FileCompilerConfig(SpoonFolder folder) {
        this(folder.getAllJavaFiles());
    }

    @Override
    public void initializeCompiler(JDTBatchCompiler compiler) {
        JDTBasedSpoonCompiler jdtCompiler = compiler.getJdtCompiler();
        List<CompilationUnit> cuList = new ArrayList<>();
        InputStream inputStream = null;

        try {
            for (SpoonFile f : getFiles(compiler)) {

                if (compiler.filesToBeIgnored.contains(f.getPath())) {
                    continue;
                }

                String fName = f.isActualFile() ? f.getPath() : f.getName();
                inputStream = f.getContent();
                char[] content = IOUtils.toCharArray(inputStream, jdtCompiler.encoding);
                cuList.add(new CompilationUnit(content, fName, null));
                IOUtils.closeQuietly(inputStream);
            }
        } catch (Exception e) {
            IOUtils.closeQuietly(inputStream);
            throw new SpoonException(e);
        }

        compiler.setCompilationUnits(cuList.toArray(new CompilationUnit[0]));
    }

    protected List<SpoonFile> getFiles(JDTBatchCompiler compiler) {
        return files;
    }
}