示例#1
0
        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;
            }
            }
        }