1.1 --- a/dew/src/main/java/org/apidesign/bck2brwsr/dew/Compile.java Mon Sep 23 00:59:14 2013 +0200
1.2 +++ b/dew/src/main/java/org/apidesign/bck2brwsr/dew/Compile.java Thu Oct 03 10:03:22 2013 +0200
1.3 @@ -83,90 +83,33 @@
1.4 }
1.5
1.6 private Map<String, byte[]> compile(final String html, final String code) throws IOException {
1.7 - StandardJavaFileManager sjfm = ToolProvider.getSystemJavaCompiler().getStandardFileManager(this, null, null);
1.8 + final ClassLoaderFileManager clfm = new ClassLoaderFileManager();
1.9 + final JavaFileObject file = clfm.createMemoryFileObject(
1.10 + ClassLoaderFileManager.convertFQNToResource(pkg.isEmpty() ? cls : pkg + "." + cls) + Kind.SOURCE.extension,
1.11 + Kind.SOURCE,
1.12 + code.getBytes());
1.13 + final JavaFileObject htmlFile = clfm.createMemoryFileObject(
1.14 + ClassLoaderFileManager.convertFQNToResource(pkg),
1.15 + Kind.OTHER,
1.16 + html.getBytes());
1.17
1.18 - final Map<String, ByteArrayOutputStream> class2BAOS = new HashMap<>();
1.19 -
1.20 - JavaFileObject file = new SimpleJavaFileObject(URI.create("mem://mem"), Kind.SOURCE) {
1.21 - @Override
1.22 - public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException {
1.23 - return code;
1.24 - }
1.25 - };
1.26 - final JavaFileObject htmlFile = new SimpleJavaFileObject(URI.create("mem://mem2"), Kind.OTHER) {
1.27 - @Override
1.28 - public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException {
1.29 - return html;
1.30 - }
1.31 -
1.32 - @Override
1.33 - public InputStream openInputStream() throws IOException {
1.34 - return new ByteArrayInputStream(html.getBytes());
1.35 - }
1.36 - };
1.37 -
1.38 - final URI scratch;
1.39 - try {
1.40 - scratch = new URI("mem://mem3");
1.41 - } catch (URISyntaxException ex) {
1.42 - throw new IOException(ex);
1.43 - }
1.44 -
1.45 - JavaFileManager jfm = new ForwardingJavaFileManager<JavaFileManager>(sjfm) {
1.46 - @Override
1.47 - public JavaFileObject getJavaFileForOutput(Location location, String className, Kind kind, FileObject sibling) throws IOException {
1.48 - if (kind == Kind.CLASS) {
1.49 - final ByteArrayOutputStream buffer = new ByteArrayOutputStream();
1.50 -
1.51 - class2BAOS.put(className.replace('.', '/') + ".class", buffer);
1.52 - return new SimpleJavaFileObject(sibling.toUri(), kind) {
1.53 - @Override
1.54 - public OutputStream openOutputStream() throws IOException {
1.55 - return buffer;
1.56 - }
1.57 - };
1.58 - }
1.59 -
1.60 - if (kind == Kind.SOURCE) {
1.61 - return new SimpleJavaFileObject(scratch/*sibling.toUri()*/, kind) {
1.62 - private final ByteArrayOutputStream data = new ByteArrayOutputStream();
1.63 - @Override
1.64 - public OutputStream openOutputStream() throws IOException {
1.65 - return data;
1.66 - }
1.67 -
1.68 - @Override
1.69 - public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException {
1.70 - data.close();
1.71 - return new String(data.toByteArray());
1.72 - }
1.73 - };
1.74 - }
1.75 -
1.76 - throw new IllegalStateException();
1.77 - }
1.78 -
1.79 + JavaFileManager jfm = new ForwardingJavaFileManager<JavaFileManager>(clfm) {
1.80 @Override
1.81 public FileObject getFileForInput(Location location, String packageName, String relativeName) throws IOException {
1.82 if (location == StandardLocation.SOURCE_PATH) {
1.83 if (packageName.equals(pkg)) {
1.84 return htmlFile;
1.85 }
1.86 - }
1.87 -
1.88 + }
1.89 return null;
1.90 }
1.91 -
1.92 };
1.93
1.94 - ToolProvider.getSystemJavaCompiler().getTask(null, jfm, this, /*XXX:*/Arrays.asList("-source", "1.7", "-target", "1.7"), null, Arrays.asList(file)).call();
1.95 -
1.96 + final Boolean res = ToolProvider.getSystemJavaCompiler().getTask(null, jfm, this, /*XXX:*/Arrays.asList("-source", "1.7", "-target", "1.7"), null, Arrays.asList(file)).call();
1.97 Map<String, byte[]> result = new HashMap<>();
1.98 -
1.99 - for (Map.Entry<String, ByteArrayOutputStream> e : class2BAOS.entrySet()) {
1.100 - result.put(e.getKey(), e.getValue().toByteArray());
1.101 + for (MemoryFileObject generated : clfm.getGeneratedFiles(Kind.CLASS)) {
1.102 + result.put(generated.getName().substring(1), generated.getContent());
1.103 }
1.104 -
1.105 return result;
1.106 }
1.107