package org.smoothbuild.builtin.java.javac; import java.io.IOException; import java.io.OutputStream; import java.net.URI; import javax.tools.SimpleJavaFileObject; import org.smoothbuild.io.fs.base.Path; import org.smoothbuild.lang.plugin.Container; import org.smoothbuild.lang.value.ArrayBuilder; import org.smoothbuild.lang.value.BlobBuilder; import org.smoothbuild.lang.value.SFile; import org.smoothbuild.lang.value.SString; import org.smoothbuild.util.ForwardingOutputStream; public class OutputClassFile extends SimpleJavaFileObject { private final ArrayBuilder<SFile> fileArrayBuilder; private final Path path; private final BlobBuilder contentBuilder; private final Container container; public OutputClassFile(ArrayBuilder<SFile> fileArrayBuilder, Path path, Container container) { super(URI.create("class:///" + path.value()), Kind.CLASS); this.fileArrayBuilder = fileArrayBuilder; this.path = path; this.container = container; this.contentBuilder = container.create().blobBuilder(); } public OutputStream openOutputStream() throws IOException { final OutputStream outputStream = contentBuilder; return new ForwardingOutputStream(outputStream) { public void close() throws IOException { outputStream.close(); SString pathString = container.create().string(path.value()); SFile file = container.create().file(pathString, contentBuilder.build()); fileArrayBuilder.add(file); } }; } }