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

/*  Class required for implementation of DynamicCompiler */

import java.io.IOException;
import java.security.SecureClassLoader;

import javax.tools.FileObject;
import javax.tools.ForwardingJavaFileManager;
import javax.tools.JavaFileObject;
import javax.tools.JavaFileObject.Kind;
import javax.tools.StandardJavaFileManager;

public class InMemoryClassFileManager extends ForwardingJavaFileManager<StandardJavaFileManager> {
	
	InMemoryBytecodeObject byteCodeObject;
	
	public InMemoryClassFileManager(StandardJavaFileManager standardManager) {
		super(standardManager);
	}
	
	@Override
	public ClassLoader getClassLoader(Location location) {
		return new SecureClassLoader() {
			@Override
			protected Class<?> findClass(String name) throws ClassNotFoundException {
				byte[] b = byteCodeObject.getBytes();
				return super.defineClass(name, b, 0, b.length);
			}
		};
	}
	
	public JavaFileObject getJavaFileForOutput(Location location, String name, Kind kind, FileObject sibling) throws IOException{
		byteCodeObject = new InMemoryBytecodeObject(name, kind);
		return byteCodeObject;
	}

}