public virtual void Save() { switch (type) { case Type_Folder: { // create folder resultSaver.SaveFolder(filename); // non-class files foreach (string[] pair in otherEntries) { resultSaver.CopyFile(pair[0], filename, pair[1]); } // classes for (int i = 0; i < classes.Count; i++) { StructClass cl = classes[i]; string entryName = decompiledData.GetClassEntryName(cl, classEntries[i]); if (entryName != null) { string content = decompiledData.GetClassContent(cl); if (content != null) { int[] mapping = null; if (DecompilerContext.GetOption(IFernflowerPreferences.Bytecode_Source_Mapping)) { mapping = DecompilerContext.GetBytecodeSourceMapper().GetOriginalLinesMapping(); } resultSaver.SaveClassFile(filename, cl.qualifiedName, entryName, content, mapping ); } } } break; } case Type_Jar: case Type_Zip: { // create archive file resultSaver.SaveFolder(archivePath); resultSaver.CreateArchive(archivePath, filename, manifest); // directory entries foreach (string dirEntry in dirEntries) { resultSaver.SaveDirEntry(archivePath, filename, dirEntry + "\\"); } // non-class entries foreach (string[] pair in otherEntries) { if (type != Type_Jar || !Sharpen.Runtime.EqualsIgnoreCase(Manifest_Name, pair[1])) { resultSaver.CopyEntry(pair[0], archivePath, filename, pair[1]); } } // classes for (int i = 0; i < classes.Count; i++) { StructClass cl = classes[i]; string entryName = decompiledData.GetClassEntryName(cl, classEntries[i]); if (entryName != null) { string content = decompiledData.GetClassContent(cl); resultSaver.SaveClassEntry(archivePath, filename, cl.qualifiedName, entryName, content ); } } resultSaver.CloseArchive(archivePath, filename); break; } } }