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);
}
};
}
}