dew/src/main/java/org/apidesign/bck2brwsr/dew/Compile.java
branchjavac
changeset 1327 217ca48c5b80
parent 1295 5b3ae17babdf
parent 1325 f7f25ea1bbec
child 1336 804f6f982f4e
     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