|
|
|
@ -54,14 +54,16 @@ namespace { |
|
|
|
|
|
|
|
|
|
class ImportWriter { |
|
|
|
|
public: |
|
|
|
|
ImportWriter() {} |
|
|
|
|
ImportWriter(const Options& options) : options_(options) {} |
|
|
|
|
|
|
|
|
|
void AddFile(const FileGenerator* file); |
|
|
|
|
void Print(io::Printer *printer) const; |
|
|
|
|
|
|
|
|
|
private: |
|
|
|
|
const Options options_; |
|
|
|
|
vector<string> protobuf_framework_imports_; |
|
|
|
|
vector<string> protobuf_non_framework_imports_; |
|
|
|
|
vector<string> other_framework_imports_; |
|
|
|
|
vector<string> other_imports_; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
@ -72,6 +74,10 @@ void ImportWriter::AddFile(const FileGenerator* file) { |
|
|
|
|
protobuf_framework_imports_.push_back( |
|
|
|
|
FilePathBasename(file_descriptor) + extension); |
|
|
|
|
protobuf_non_framework_imports_.push_back(file->Path() + extension); |
|
|
|
|
} else if (!options_.generate_for_named_framework.empty()) { |
|
|
|
|
other_framework_imports_.push_back( |
|
|
|
|
options_.generate_for_named_framework + "/" + |
|
|
|
|
FilePathBasename(file_descriptor) + extension); |
|
|
|
|
} else { |
|
|
|
|
other_imports_.push_back(file->Path() + extension); |
|
|
|
|
} |
|
|
|
@ -81,6 +87,8 @@ void ImportWriter::Print(io::Printer *printer) const { |
|
|
|
|
assert(protobuf_non_framework_imports_.size() == |
|
|
|
|
protobuf_framework_imports_.size()); |
|
|
|
|
|
|
|
|
|
bool add_blank_line = false; |
|
|
|
|
|
|
|
|
|
if (protobuf_framework_imports_.size() > 0) { |
|
|
|
|
const string framework_name(ProtobufLibraryFrameworkName); |
|
|
|
|
const string cpp_symbol(ProtobufFrameworkImportSymbol(framework_name)); |
|
|
|
@ -106,12 +114,29 @@ void ImportWriter::Print(io::Printer *printer) const { |
|
|
|
|
printer->Print( |
|
|
|
|
"#endif\n"); |
|
|
|
|
|
|
|
|
|
if (other_imports_.size() > 0) { |
|
|
|
|
add_blank_line = true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (other_framework_imports_.size() > 0) { |
|
|
|
|
if (add_blank_line) { |
|
|
|
|
printer->Print("\n"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for (vector<string>::const_iterator iter = other_framework_imports_.begin(); |
|
|
|
|
iter != other_framework_imports_.end(); ++iter) { |
|
|
|
|
printer->Print( |
|
|
|
|
" #import <$header$>\n", |
|
|
|
|
"header", *iter); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
add_blank_line = true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (other_imports_.size() > 0) { |
|
|
|
|
if (add_blank_line) { |
|
|
|
|
printer->Print("\n"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for (vector<string>::const_iterator iter = other_imports_.begin(); |
|
|
|
|
iter != other_imports_.end(); ++iter) { |
|
|
|
|
printer->Print( |
|
|
|
@ -156,7 +181,7 @@ FileGenerator::~FileGenerator() { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void FileGenerator::GenerateHeader(io::Printer *printer) { |
|
|
|
|
PrintFilePreamble(printer, "GPBProtocolBuffers.h"); |
|
|
|
|
PrintFileRuntimePreamble(printer, "GPBProtocolBuffers.h"); |
|
|
|
|
|
|
|
|
|
// Add some verification that the generated code matches the source the
|
|
|
|
|
// code is being compiled with.
|
|
|
|
@ -170,7 +195,7 @@ void FileGenerator::GenerateHeader(io::Printer *printer) { |
|
|
|
|
|
|
|
|
|
// #import any headers for "public imports" in the proto file.
|
|
|
|
|
{ |
|
|
|
|
ImportWriter import_writer; |
|
|
|
|
ImportWriter import_writer(options_); |
|
|
|
|
const vector<FileGenerator *> &dependency_generators = DependencyGenerators(); |
|
|
|
|
for (vector<FileGenerator *>::const_iterator iter = |
|
|
|
|
dependency_generators.begin(); |
|
|
|
@ -273,10 +298,10 @@ void FileGenerator::GenerateHeader(io::Printer *printer) { |
|
|
|
|
|
|
|
|
|
void FileGenerator::GenerateSource(io::Printer *printer) { |
|
|
|
|
// #import the runtime support.
|
|
|
|
|
PrintFilePreamble(printer, "GPBProtocolBuffers_RuntimeSupport.h"); |
|
|
|
|
PrintFileRuntimePreamble(printer, "GPBProtocolBuffers_RuntimeSupport.h"); |
|
|
|
|
|
|
|
|
|
{ |
|
|
|
|
ImportWriter import_writer; |
|
|
|
|
ImportWriter import_writer(options_); |
|
|
|
|
|
|
|
|
|
// #import the header for this proto file.
|
|
|
|
|
import_writer.AddFile(this); |
|
|
|
@ -471,7 +496,10 @@ const vector<FileGenerator *> &FileGenerator::DependencyGenerators() { |
|
|
|
|
return dependency_generators_; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void FileGenerator::PrintFilePreamble( |
|
|
|
|
// Helper to print the import of the runtime support at the top of generated
|
|
|
|
|
// files. This currently only supports the runtime coming from a framework
|
|
|
|
|
// as defined by the official CocoaPod.
|
|
|
|
|
void FileGenerator::PrintFileRuntimePreamble( |
|
|
|
|
io::Printer* printer, const string& header_to_import) const { |
|
|
|
|
printer->Print( |
|
|
|
|
"// Generated by the protocol buffer compiler. DO NOT EDIT!\n" |
|
|
|
|