public static void assertCompiles(String name, String source) { URLClassLoader parent = (URLClassLoader) CompileUtils.class.getClassLoader(); SimpleCompiler compiler = new SimpleCompiler(); MemFileManager fileManager = new MemFileManager(parent, compiler.getStandardFileManager(null, null, null)); String classpath = SimpleCompiler.getClassPath(parent); List<String> compilationOptions = Arrays.asList("-classpath", classpath, "-g:none"); // compile SimpleJavaFileObject javaFileObject = new MemSourceFileObject(name, source); Writer out = new StringWriter(); JavaCompiler.CompilationTask task = compiler.getTask(out, fileManager, null, compilationOptions, null, Collections.singletonList(javaFileObject)); if (!task.call()) { Assert.fail("Compilation of " + source + " failed.\n" + out.toString()); } }
public JDKEvaluatorFactory(URLClassLoader parent, JavaCompiler compiler) { this.fileManager = new MemFileManager(parent, compiler.getStandardFileManager(null, null, null)); this.compiler = compiler; this.classpath = SimpleCompiler.getClassPath(parent); this.loader = fileManager.getClassLoader(StandardLocation.CLASS_OUTPUT); this.compilationOptions = Arrays.asList("-classpath", classpath, "-g:none"); }
@Override public FileObject getFileForOutput(JavaFileManager.Location location, String packageName, String relativeName, FileObject sibling) throws IOException { String name = null; if ("".equals(packageName)) { name = relativeName; } else { name = packageName.replace('.', '/') + "/" + relativeName; } LocationAndKind key = new LocationAndKind(location, Kind.OTHER); if (ramFileSystem.containsKey(key)) { JavaFileObject jfo = ramFileSystem.get(key).get(name); if (jfo != null) { return jfo; } } JavaFileObject jfo = new MemJavaFileObject(urlPrefix, name, Kind.OTHER); register(key, jfo); return jfo; }
@Override public void acceptResult(CompilationResult result) { if (result.hasErrors()) { for (CategorizedProblem problem: result.getProblems()) { if (problem.isError()) { problemList.add(problem.getMessage()); } } } else { for (ClassFile clazz: result.getClassFiles()) { try { MemJavaFileObject jfo = (MemJavaFileObject) fileManager .getJavaFileForOutput(StandardLocation.CLASS_OUTPUT, new String(clazz.fileName()), JavaFileObject.Kind.CLASS, null); OutputStream os = jfo.openOutputStream(); os.write(clazz.getBytes()); } catch (IOException ex) { throw new RuntimeException(ex); } } } } };
public ECJEvaluatorFactory(ClassLoader parent, CompilerOptions compilerOptions) { this.parentClassLoader = parent; this.fileManager = new MemFileManager(parent, new EclipseFileManager(Locale.getDefault(), Charset.defaultCharset())); this.loader = fileManager.getClassLoader(StandardLocation.CLASS_OUTPUT); this.compilerOptions = compilerOptions; }
@Override public JavaFileObject getJavaFileForOutput(Location location, String name, Kind kind, FileObject sibling) throws IOException { JavaFileObject javaFileObject = null; LocationAndKind key = new LocationAndKind(location, kind); if (ramFileSystem.containsKey(key)) { javaFileObject = ramFileSystem.get(key).get(name); if (javaFileObject != null) { return javaFileObject; } } if (kind == Kind.SOURCE) { javaFileObject = new MemSourceFileObject(name); } else { javaFileObject = new MemJavaFileObject(urlPrefix, name, kind); } register(key, javaFileObject); return javaFileObject; }
public static void assertCompiles(String name, String source) { URLClassLoader parent = (URLClassLoader) CompileUtils.class.getClassLoader(); SimpleCompiler compiler = new SimpleCompiler(); MemFileManager fileManager = new MemFileManager(parent, compiler.getStandardFileManager(null, null, null)); String classpath = SimpleCompiler.getClassPath(parent); List<String> compilationOptions = Arrays.asList("-classpath", classpath, "-g:none"); // compile SimpleJavaFileObject javaFileObject = new MemSourceFileObject(name, source); Writer out = new StringWriter(); JavaCompiler.CompilationTask task = compiler.getTask(out, fileManager, null, compilationOptions, null, Collections.singletonList(javaFileObject)); if (!task.call()) { Assert.fail("Compilation of " + source + " failed.\n" + out.toString()); } }