1.1 --- a/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/Compile.java Wed Feb 20 18:14:59 2013 +0100
1.2 +++ b/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/Compile.java Tue Apr 29 14:59:40 2014 +0200
1.3 @@ -42,11 +42,13 @@
1.4 import javax.tools.StandardJavaFileManager;
1.5 import javax.tools.StandardLocation;
1.6 import javax.tools.ToolProvider;
1.7 +import org.apidesign.bck2brwsr.core.ExtraJavaScript;
1.8
1.9 /**
1.10 *
1.11 * @author Jaroslav Tulach <jtulach@netbeans.org>
1.12 */
1.13 +@ExtraJavaScript(processByteCode = false, resource = "")
1.14 final class Compile implements DiagnosticListener<JavaFileObject> {
1.15 private final List<Diagnostic<? extends JavaFileObject>> errors = new ArrayList<>();
1.16 private final Map<String, byte[]> classes;
1.17 @@ -114,52 +116,7 @@
1.18 throw new IOException(ex);
1.19 }
1.20
1.21 - JavaFileManager jfm = new ForwardingJavaFileManager<JavaFileManager>(sjfm) {
1.22 - @Override
1.23 - public JavaFileObject getJavaFileForOutput(Location location, String className, Kind kind, FileObject sibling) throws IOException {
1.24 - if (kind == Kind.CLASS) {
1.25 - final ByteArrayOutputStream buffer = new ByteArrayOutputStream();
1.26 -
1.27 - class2BAOS.put(className.replace('.', '/') + ".class", buffer);
1.28 - return new SimpleJavaFileObject(sibling.toUri(), kind) {
1.29 - @Override
1.30 - public OutputStream openOutputStream() throws IOException {
1.31 - return buffer;
1.32 - }
1.33 - };
1.34 - }
1.35 -
1.36 - if (kind == Kind.SOURCE) {
1.37 - return new SimpleJavaFileObject(scratch/*sibling.toUri()*/, kind) {
1.38 - private final ByteArrayOutputStream data = new ByteArrayOutputStream();
1.39 - @Override
1.40 - public OutputStream openOutputStream() throws IOException {
1.41 - return data;
1.42 - }
1.43 -
1.44 - @Override
1.45 - public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException {
1.46 - data.close();
1.47 - return new String(data.toByteArray());
1.48 - }
1.49 - };
1.50 - }
1.51 -
1.52 - throw new IllegalStateException();
1.53 - }
1.54 -
1.55 - @Override
1.56 - public FileObject getFileForInput(Location location, String packageName, String relativeName) throws IOException {
1.57 - if (location == StandardLocation.SOURCE_PATH) {
1.58 - if (packageName.equals(pkg)) {
1.59 - return htmlFile;
1.60 - }
1.61 - }
1.62 -
1.63 - return null;
1.64 - }
1.65 -
1.66 - };
1.67 + JavaFileManager jfm = new ForwardingJavaFileManagerImpl(sjfm, class2BAOS, scratch, htmlFile);
1.68
1.69 ToolProvider.getSystemJavaCompiler().getTask(null, jfm, this, /*XXX:*/Arrays.asList("-source", "1.7", "-target", "1.7"), null, Arrays.asList(file)).call();
1.70
1.71 @@ -200,4 +157,63 @@
1.72 String fqn = "'" + pkg + '.' + cls + "'";
1.73 return html.replace("'${fqn}'", fqn);
1.74 }
1.75 +
1.76 + @ExtraJavaScript(processByteCode = false, resource = "")
1.77 + private class ForwardingJavaFileManagerImpl extends ForwardingJavaFileManager<JavaFileManager> {
1.78 +
1.79 + private final Map<String, ByteArrayOutputStream> class2BAOS;
1.80 + private final URI scratch;
1.81 + private final JavaFileObject htmlFile;
1.82 +
1.83 + public ForwardingJavaFileManagerImpl(JavaFileManager fileManager, Map<String, ByteArrayOutputStream> class2BAOS, URI scratch, JavaFileObject htmlFile) {
1.84 + super(fileManager);
1.85 + this.class2BAOS = class2BAOS;
1.86 + this.scratch = scratch;
1.87 + this.htmlFile = htmlFile;
1.88 + }
1.89 +
1.90 + @Override
1.91 + public JavaFileObject getJavaFileForOutput(Location location, String className, Kind kind, FileObject sibling) throws IOException {
1.92 + if (kind == Kind.CLASS) {
1.93 + final ByteArrayOutputStream buffer = new ByteArrayOutputStream();
1.94 +
1.95 + class2BAOS.put(className.replace('.', '/') + ".class", buffer);
1.96 + return new SimpleJavaFileObject(sibling.toUri(), kind) {
1.97 + @Override
1.98 + public OutputStream openOutputStream() throws IOException {
1.99 + return buffer;
1.100 + }
1.101 + };
1.102 + }
1.103 +
1.104 + if (kind == Kind.SOURCE) {
1.105 + return new SimpleJavaFileObject(scratch/*sibling.toUri()*/, kind) {
1.106 + private final ByteArrayOutputStream data = new ByteArrayOutputStream();
1.107 + @Override
1.108 + public OutputStream openOutputStream() throws IOException {
1.109 + return data;
1.110 + }
1.111 +
1.112 + @Override
1.113 + public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException {
1.114 + data.close();
1.115 + return new String(data.toByteArray());
1.116 + }
1.117 + };
1.118 + }
1.119 +
1.120 + throw new IllegalStateException();
1.121 + }
1.122 +
1.123 + @Override
1.124 + public FileObject getFileForInput(Location location, String packageName, String relativeName) throws IOException {
1.125 + if (location == StandardLocation.SOURCE_PATH) {
1.126 + if (packageName.equals(pkg)) {
1.127 + return htmlFile;
1.128 + }
1.129 + }
1.130 +
1.131 + return null;
1.132 + }
1.133 + }
1.134 }