Programming-Language-Compiler / edu / ufl / cise / plc / runtime / javaCompilerClassLoader / DynamicCompiler.java
DynamicCompiler.java
Raw
package edu.ufl.cise.plc.runtime.javaCompilerClassLoader;

import java.util.ArrayList;
import java.util.List;

import javax.tools.JavaCompiler;
import javax.tools.JavaFileObject;
import javax.tools.ToolProvider;

public class DynamicCompiler {
	
	
	/** Compiles java source code provided in the form a  String and returns the class file in the form of a byte array. */
	public static byte[] compile(String fullyQualifiedName, String sourceCode) throws Exception {
		
		JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
		InMemoryClassFileManager fileManager = new InMemoryClassFileManager(compiler.getStandardFileManager(null, null, null));
		
		List<JavaFileObject> sourceFiles = new ArrayList<>();
		sourceFiles.add(new StringJavaFileObject(fullyQualifiedName, sourceCode));
		
		boolean success = compiler.getTask(null, fileManager, null, null, null, sourceFiles).call();
		if (success) {
			return fileManager.byteCodeObject.getBytes();
		}
		else throw new Exception("error compiling generated code");
		}
	}