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