#include <google/protobuf/compiler/cpp/file.h>
#include <iostream>
#include <map>
#include <memory>
#include <set>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#include <google/protobuf/compiler/scc.h>
#include <google/protobuf/io/printer.h>
#include <google/protobuf/stubs/strutil.h>
#include <google/protobuf/compiler/cpp/enum.h>
#include <google/protobuf/compiler/cpp/extension.h>
#include <google/protobuf/compiler/cpp/field.h>
#include <google/protobuf/compiler/cpp/helpers.h>
#include <google/protobuf/compiler/cpp/message.h>
#include <google/protobuf/compiler/cpp/service.h>
#include <google/protobuf/descriptor.pb.h>
#include <google/protobuf/port_def.inc>
namespace google {
namespace protobuf {
namespace compiler {
namespace cpp {
namespace {
template <class T>
std::string GetSortKey(const T& val) { … }
template <>
std::string GetSortKey<FileDescriptor>(const FileDescriptor& val) { … }
template <class T>
bool CompareSortKeys(const T* a, const T* b) { … }
template <class T>
std::vector<const T*> Sorted(const std::unordered_set<const T*>& vals) { … }
inline void MuteWuninitialized(Formatter& format) { … }
inline void UnmuteWuninitialized(Formatter& format) { … }
}
FileGenerator::FileGenerator(const FileDescriptor* file, const Options& options)
: … { … }
FileGenerator::~FileGenerator() = default;
void FileGenerator::GenerateMacroUndefs(io::Printer* printer) { … }
void FileGenerator::GenerateHeader(io::Printer* printer) { … }
void FileGenerator::GenerateProtoHeader(io::Printer* printer,
const std::string& info_path) { … }
void FileGenerator::GeneratePBHeader(io::Printer* printer,
const std::string& info_path) { … }
void FileGenerator::DoIncludeFile(const std::string& google3_name,
bool do_export, io::Printer* printer) { … }
std::string FileGenerator::CreateHeaderInclude(const std::string& basename,
const FileDescriptor* file) { … }
void FileGenerator::GenerateSourceIncludes(io::Printer* printer) { … }
void FileGenerator::GenerateSourcePrelude(io::Printer* printer) { … }
void FileGenerator::GenerateSourceDefaultInstance(int idx,
io::Printer* printer) { … }
struct FileGenerator::CrossFileReferences { … };
void FileGenerator::GetCrossFileReferencesForField(const FieldDescriptor* field,
CrossFileReferences* refs) { … }
void FileGenerator::GetCrossFileReferencesForFile(const FileDescriptor* file,
CrossFileReferences* refs) { … }
void FileGenerator::GenerateInternalForwardDeclarations(
const CrossFileReferences& refs, io::Printer* printer) { … }
void FileGenerator::GenerateSourceForMessage(int idx, io::Printer* printer) { … }
void FileGenerator::GenerateSourceForExtension(int idx, io::Printer* printer) { … }
void FileGenerator::GenerateGlobalSource(io::Printer* printer) { … }
void FileGenerator::GenerateSource(io::Printer* printer) { … }
void FileGenerator::GenerateReflectionInitializationCode(io::Printer* printer) { … }
class FileGenerator::ForwardDeclarations { … };
static void PublicImportDFS(const FileDescriptor* fd,
std::unordered_set<const FileDescriptor*>* fd_set) { … }
void FileGenerator::GenerateForwardDeclarations(io::Printer* printer) { … }
void FileGenerator::GenerateTopHeaderGuard(io::Printer* printer, bool pb_h) { … }
void FileGenerator::GenerateBottomHeaderGuard(io::Printer* printer, bool pb_h) { … }
void FileGenerator::GenerateLibraryIncludes(io::Printer* printer) { … }
void FileGenerator::GenerateMetadataPragma(io::Printer* printer,
const std::string& info_path) { … }
void FileGenerator::GenerateDependencyIncludes(io::Printer* printer) { … }
void FileGenerator::GenerateGlobalStateFunctionDeclarations(
io::Printer* printer) { … }
void FileGenerator::GenerateMessageDefinitions(io::Printer* printer) { … }
void FileGenerator::GenerateEnumDefinitions(io::Printer* printer) { … }
void FileGenerator::GenerateServiceDefinitions(io::Printer* printer) { … }
void FileGenerator::GenerateExtensionIdentifiers(io::Printer* printer) { … }
void FileGenerator::GenerateInlineFunctionDefinitions(io::Printer* printer) { … }
void FileGenerator::GenerateProto2NamespaceEnumSpecializations(
io::Printer* printer) { … }
}
}
}
}