diff options
-rw-r--r-- | Geniface.java | 136 |
1 files changed, 0 insertions, 136 deletions
diff --git a/Geniface.java b/Geniface.java deleted file mode 100644 index c307050..0000000 --- a/Geniface.java +++ /dev/null @@ -1,136 +0,0 @@ -/* just an experiment - should be implemented in clojure later */ - -import java.io.*; -import javax.tools.*; - -import java.nio.charset.Charset; -import java.util.Locale; -import java.util.UUID; -import java.util.Properties; - -public class Geniface { - - class ByteClassLoader extends ClassLoader{ - String name; byte[] b; - ByteClassLoader (String name, byte[] b) { - this.b=b; - this.name=name; - } - Class getTheClass() { - return defineClass(name, b, 0, b.length); - } - } - - private String temp_prefix; - private String my_uuid; - - private String GeneratedText; - - public Geniface (String temp_prefix) { - this.temp_prefix = temp_prefix; - this.my_uuid = "myuid" + UUID.randomUUID().toString().replace('-', '_'); - this.GeneratedText = - "public interface " + my_uuid + " {"; - } - - public Geniface () { - this(System.getProperty("java.io.tmpdir")); - } - - public void addMethod (String name, int ObjectArgCount, boolean ret) { - /* Add a Method with ObjectArgCount arguments which either - * returns void if !ret, or returns an Object if ret */ - GeneratedText += - (ret ? "\n\tObject " : "\n\tvoid ") + name + "("; - for (int i = 0; i < ObjectArgCount; i++) { - GeneratedText += (i == 0 ? "" : ", ") + "Object arg" + i; - } - GeneratedText += ");"; - } - - public String getSourceString () { - return GeneratedText + "}"; - } - - public static byte[] getBytesFromFile(File file) throws IOException { - InputStream is = new FileInputStream(file); - - // Get the size of the file - long length = file.length(); - - if (length > Integer.MAX_VALUE) { - // File is too large - } - - // Create the byte array to hold the data - byte[] bytes = new byte[(int)length]; - - // Read in the bytes - int offset = 0; - int numRead = 0; - while (offset < bytes.length - && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) { - offset += numRead; - } - - // Ensure all the bytes have been read in - if (offset < bytes.length) { - throw new IOException("Could not completely read file "+file.getName()); - } - - // Close the input stream and return bytes - is.close(); - return bytes; - } - - public Class compileToClass () { - try { - String javaname = temp_prefix + "/" + my_uuid + ".java"; - String classname = temp_prefix + "/" + my_uuid + ".class"; - - FileOutputStream out = new FileOutputStream(javaname); - out.write(getSourceString().getBytes()); - out.close(); - - File [] files1 = new File[] - { new File(javaname) }; - - JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); - DiagnosticCollector<JavaFileObject> diagnostics = new - DiagnosticCollector<JavaFileObject>(); - StandardJavaFileManager fileManager = - compiler.getStandardFileManager(diagnostics, Locale.GERMANY, - Charset.forName("UTF-8")); - - Iterable<? extends JavaFileObject> compilationUnits1 = - fileManager.getJavaFileObjectsFromFiles(java.util.Arrays.asList(files1)); - compiler.getTask(null, fileManager, diagnostics, null, null, -compilationUnits1).call(); - - for (Diagnostic diagnostic : diagnostics.getDiagnostics()) - { - System.out.println(diagnostic); - } - - fileManager.close(); - - return new ByteClassLoader(my_uuid, getBytesFromFile (new File(classname))).getTheClass(); - } - catch (IOException exn1) { - System.out.println("IOExn"); - } - - return null; - - } - - public static void main (String[] args) { - Geniface iface1 = new Geniface(); - iface1.addMethod("Hallo", 10, false); - iface1.addMethod("Fuck", 2, true); - iface1.addMethod("valuesofbetawillgiverisetodom", 1, true); - iface1.addMethod("nilpferd", 0, false); - System.out.println(iface1.getSourceString()); - System.out.println(iface1.compileToClass()); - } -}
\ No newline at end of file |