Package com.envoisolutions.sxc.compiler

Source Code of com.envoisolutions.sxc.compiler.EclipseCompiler

package com.envoisolutions.sxc.compiler;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.commons.jci.compilers.AbstractJavaCompiler;
import org.apache.commons.jci.compilers.CompilationResult;
import org.apache.commons.jci.compilers.EclipseJavaCompiler;
import org.apache.commons.jci.compilers.EclipseJavaCompilerSettings;
import org.apache.commons.jci.problems.CompilationProblem;
import org.apache.commons.jci.readers.FileResourceReader;
import org.apache.commons.jci.stores.MemoryResourceStore;
import org.apache.commons.jci.stores.ResourceStore;
import org.apache.commons.jci.stores.ResourceStoreClassLoader;
import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;

import com.envoisolutions.sxc.builder.BuildException;

public class EclipseCompiler implements Compiler {
    /* (non-Javadoc)
     * @see com.envoisolutions.sxc.builder.impl.ICompiler#compile(java.io.File)
     */
    @SuppressWarnings("unchecked")
    public ClassLoader compile(File dir) {
        EclipseJavaCompilerSettings settings = new EclipseJavaCompilerSettings();
        Map<Object, Object> map = settings.getMap();
        map.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_1_5);
       
        EclipseJavaCompiler compiler = new EclipseJavaCompiler(settings);
        
        if (!dir.exists()) {
            throw new BuildException("Compilation directory does not exist!");
        }
       
        FileResourceReader reader = new FileResourceReader(dir);
       
        List<String> classes = new ArrayList<String>();
        for (String s : reader.list()) {
            String name = AbstractJavaCompiler.convertResourceNameToClassName(s);
            name = name.replace('/', '.');
            name = name.replace('\\', '.');
           
            classes.add(name);
        }
       
        MemoryResourceStore store = new MemoryResourceStore();
        CompilationResult result
            = compiler.compile(classes.toArray(new String[classes.size()]), reader, store);
       
        CompilationProblem[] errors = result.getErrors();
        for (CompilationProblem p : errors) {
            System.out.println(p.getMessage());
        }
       
        // TODO throw better errors!
        if (errors.length > 0) {
            throw new BuildException("Could not compile generated files!");
        }
       
        return new ResourceStoreClassLoader(Thread.currentThread().getContextClassLoader(),
                                            new ResourceStore[] { store });
    }
}
TOP

Related Classes of com.envoisolutions.sxc.compiler.EclipseCompiler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.