summaryrefslogtreecommitdiff
path: root/container-compiler-plugin/src/test/java/io/trygvis/container/compiler/InMemoryJavaFileManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'container-compiler-plugin/src/test/java/io/trygvis/container/compiler/InMemoryJavaFileManager.java')
-rw-r--r--container-compiler-plugin/src/test/java/io/trygvis/container/compiler/InMemoryJavaFileManager.java74
1 files changed, 74 insertions, 0 deletions
diff --git a/container-compiler-plugin/src/test/java/io/trygvis/container/compiler/InMemoryJavaFileManager.java b/container-compiler-plugin/src/test/java/io/trygvis/container/compiler/InMemoryJavaFileManager.java
new file mode 100644
index 0000000..e476d3e
--- /dev/null
+++ b/container-compiler-plugin/src/test/java/io/trygvis/container/compiler/InMemoryJavaFileManager.java
@@ -0,0 +1,74 @@
+package io.trygvis.container.compiler;
+
+import org.apache.commons.io.output.ByteArrayOutputStream;
+
+import javax.tools.FileObject;
+import javax.tools.ForwardingJavaFileManager;
+import javax.tools.JavaFileObject;
+import javax.tools.SimpleJavaFileObject;
+import javax.tools.StandardJavaFileManager;
+import java.io.CharArrayWriter;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.Writer;
+import java.net.URI;
+import java.util.HashMap;
+import java.util.Map;
+
+public class InMemoryJavaFileManager extends ForwardingJavaFileManager<StandardJavaFileManager> {
+ public final Map<String, String> codes = new HashMap<>();
+
+ public InMemoryJavaFileManager(StandardJavaFileManager standardFileManager) {
+ super(standardFileManager);
+ }
+
+ @Override
+ public FileObject getFileForOutput(Location location, String packageName, String relativeName, FileObject sibling) throws IOException {
+ System.out.println("io.trygvis.container.compiler.InMemoryJavaFileManager.getFileForOutput");
+ throw new RuntimeException("");
+ }
+
+ @Override
+ public JavaFileObject getJavaFileForOutput(Location location, final String className, JavaFileObject.Kind kind, FileObject sibling) throws IOException {
+ System.out.println("io.trygvis.container.compiler.InMemoryJavaFileManager.getJavaFileForOutput");
+ return new SimpleJavaFileObject(URI.create("wat://woot/" + className.replace('.', '/') + ".java"), kind) {
+ String code;
+
+ @Override
+ public Writer openWriter() throws IOException {
+ return new CharArrayWriter() {
+ @Override
+ public void close() {
+ super.close();
+ System.out.println("Closing writer to: className = " + className);
+ code = super.toString();
+ codes.put(className, code);
+ }
+ };
+ }
+
+ @Override
+ public OutputStream openOutputStream() throws IOException {
+ return new ByteArrayOutputStream() {
+ @Override
+ public void close() throws IOException {
+ super.close();
+ // ignored for now
+// System.out.println("Closing output stream to: className = " + className);
+// System.out.println(new String(super.toByteArray()));
+ }
+ };
+ }
+
+ @Override
+ public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException {
+ if(code == null) {
+ throw new FileNotFoundException(className);
+ }
+
+ return code;
+ }
+ };
+ }
+}