public static API_IKVMC_Java_Metadata javaMetadata(this string file) { API_IKVMC_Java_Metadata javaMetadata = null; try { javaMetadata = (API_IKVMC_Java_Metadata)O2LiveObjects.get(file); // try first to get a cached version of this file } catch {} if (javaMetadata.isNull() && file.fileExists()) { "Cached version not found, loading from disk".info(); if (file.extension(".xml")) { javaMetadata = file.load <API_IKVMC_Java_Metadata>(); } else { javaMetadata = new API_IKVMC().create_JavaMetadata(file); } O2LiveObjects.set(file, javaMetadata); } return(javaMetadata); }
public static object createClassFile(this API_IKVMC ikvmc, byte[] bytes) { // 0 = ClassFileParseOptions.None, // 1 = ClassFileParseOptions.LocalVariableTable , // 2 = ClassFileParseOptions.LineNumberTable return(ikvmc.createClassFile(bytes, 0)); }
public static IDictionary getRawClassesData_FromFile_ClassesOrJar(this API_IKVMC ikvmc, string classOrJar) { var targets = typeof(List <>).MakeGenericType(new System.Type[] { ikvmc.CompilerOptions.type() }).ctor(); var args = classOrJar.wrapOnList().GetEnumerator(); ikvmc.IkvmcCompiler.invoke("ParseCommandLine", args, targets, ikvmc.CompilerOptions); var compilerOptions = (targets as IEnumerable).first(); //var classes = (Dictionary<string, byte[]>) compilerOptions.field("classes"); var classes = (IDictionary)compilerOptions.field("classes"); return(classes); }
public static object createClassFile(this API_IKVMC ikvmc, byte[] bytes, int classFileParseOptions) { var classFileType = ikvmc.IkvmcAssembly.type("ClassFile"); var ctor = classFileType.ctors().first(); var classFile = ctor.Invoke(new object[] { bytes, 0, bytes.Length, null, classFileParseOptions }); if (classFile.notNull()) { return(classFile); } "[API_IKVMC] in createClassObject failed to create class".info(); return(null); }
public static API_IKVMC_Java_Metadata create_JavaMetadata(this API_IKVMC ikvmc, string fileToProcess) { var o2Timer = new O2Timer("Created JavaData for {0}".format(fileToProcess)).start(); var javaMetaData = new API_IKVMC_Java_Metadata(); javaMetaData.FileProcessed = fileToProcess; var classes = ikvmc.getRawClassesData_FromFile_ClassesOrJar(fileToProcess); foreach (DictionaryEntry item in classes) { var name = item.Key.str(); var bytes = (byte[])item.Value.field("data"); var classFile = ikvmc.createClassFile(bytes, 1); // value of 1 gets the local variables var javaClass = new Java_Class { Signature = name, Name = name.contains(".") ? name.split(".").last() : name, SourceFile = classFile.prop("SourceFileAttribute").str(), IsAbstract = classFile.prop("IsAbstract").str().toBool(), IsInterface = classFile.prop("IsInterface").str().toBool(), IsInternal = classFile.prop("IsInternal").str().toBool(), IsPublic = classFile.prop("IsPublic").str().toBool(), SuperClass = classFile.prop("SuperClass").str() }; if (classFile.prop("GenericSignature").notNull()) { javaClass.GenericSignature = classFile.prop("GenericSignature").str(); } javaClass.ConstantsPool = classFile.getConstantPoolEntries(); javaClass.map_Annotations(classFile) .map_Interfaces(classFile) .map_Fields(classFile) .map_Methods(classFile) .map_EnclosingMethod(classFile); javaClass.map_LineNumbers(ikvmc.createClassFile(bytes, 2)); // for this we need to call createClassFile with the value of 2 (to get the source code references) javaMetaData.Classes.Add(javaClass); //break; // } o2Timer.stop(); return(javaMetaData); }
public static string createAssembly_FromFile_ClasssesOrJar(this API_IKVMC ikvmc, string classOrJar) { var console = "IKVM Stored Console out and error".capture_Console(); var targetFile = "_IKVM_Dlls".tempDir(false).pathCombine("{0}.dll".format(classOrJar.fileName())); var args = new List <string> { classOrJar, "-out:{0}".format(targetFile) }.GetEnumerator(); //return args.toList(); var targets = typeof(List <>).MakeGenericType(new System.Type[] { ikvmc.CompilerOptions.type() }).ctor(); ikvmc.IkvmcCompiler.invoke("ParseCommandLine", args, targets, ikvmc.CompilerOptions); //ikvmcCompiler.details(); var compilerClassLoader = ikvmc.IkvmcAssembly.type("CompilerClassLoader"); var compile = compilerClassLoader.method("Compile"); var createCompiler = compilerClassLoader.method("CreateCompiler"); PublicDI.reflection.invokeMethod_Static(compile, new object[] { null, targets }); //ikvmcCompiler.details(); return(console.readToEnd()); }
public static API_IKVMC_Java_Metadata javaMetadata(this string file) { API_IKVMC_Java_Metadata javaMetadata = null; try { javaMetadata = (API_IKVMC_Java_Metadata)O2LiveObjects.get(file); // try first to get a cached version of this file } catch {} if (javaMetadata.isNull() && file.fileExists()) { "Cached version not found, loading from disk".info(); if (file.extension(".xml")) javaMetadata = file.load<API_IKVMC_Java_Metadata>(); else javaMetadata = new API_IKVMC().create_JavaMetadata(file); O2LiveObjects.set(file, javaMetadata); } return javaMetadata; }