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