|
|
|
@ -59,7 +59,6 @@ namespace objectivec { |
|
|
|
|
FileGenerator::FileGenerator(const FileDescriptor *file, const Options& options) |
|
|
|
|
: file_(file), |
|
|
|
|
root_class_name_(FileClassName(file)), |
|
|
|
|
is_public_dep_(false), |
|
|
|
|
options_(options) { |
|
|
|
|
for (int i = 0; i < file_->enum_type_count(); i++) { |
|
|
|
|
EnumGenerator *generator = new EnumGenerator(file_->enum_type(i)); |
|
|
|
@ -78,8 +77,6 @@ FileGenerator::FileGenerator(const FileDescriptor *file, const Options& options) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
FileGenerator::~FileGenerator() { |
|
|
|
|
STLDeleteContainerPointers(dependency_generators_.begin(), |
|
|
|
|
dependency_generators_.end()); |
|
|
|
|
STLDeleteContainerPointers(enum_generators_.begin(), enum_generators_.end()); |
|
|
|
|
STLDeleteContainerPointers(message_generators_.begin(), |
|
|
|
|
message_generators_.end()); |
|
|
|
@ -105,14 +102,9 @@ void FileGenerator::GenerateHeader(io::Printer *printer) { |
|
|
|
|
ImportWriter import_writer( |
|
|
|
|
options_.generate_for_named_framework, |
|
|
|
|
options_.named_framework_to_proto_path_mappings_path); |
|
|
|
|
const vector<FileGenerator *> &dependency_generators = DependencyGenerators(); |
|
|
|
|
const string header_extension(kHeaderExtension); |
|
|
|
|
for (vector<FileGenerator *>::const_iterator iter = |
|
|
|
|
dependency_generators.begin(); |
|
|
|
|
iter != dependency_generators.end(); ++iter) { |
|
|
|
|
if ((*iter)->IsPublicDependency()) { |
|
|
|
|
import_writer.AddFile((*iter)->file_, header_extension); |
|
|
|
|
} |
|
|
|
|
for (int i = 0; i < file_->public_dependency_count(); i++) { |
|
|
|
|
import_writer.AddFile(file_->public_dependency(i), header_extension); |
|
|
|
|
} |
|
|
|
|
import_writer.Print(printer); |
|
|
|
|
} |
|
|
|
@ -223,13 +215,15 @@ void FileGenerator::GenerateSource(io::Printer *printer) { |
|
|
|
|
|
|
|
|
|
// #import the headers for anything that a plain dependency of this proto
|
|
|
|
|
// file (that means they were just an include, not a "public" include).
|
|
|
|
|
const vector<FileGenerator *> &dependency_generators = |
|
|
|
|
DependencyGenerators(); |
|
|
|
|
for (vector<FileGenerator *>::const_iterator iter = |
|
|
|
|
dependency_generators.begin(); |
|
|
|
|
iter != dependency_generators.end(); ++iter) { |
|
|
|
|
if (!(*iter)->IsPublicDependency()) { |
|
|
|
|
import_writer.AddFile((*iter)->file_, header_extension); |
|
|
|
|
set<string> public_import_names; |
|
|
|
|
for (int i = 0; i < file_->public_dependency_count(); i++) { |
|
|
|
|
public_import_names.insert(file_->public_dependency(i)->name()); |
|
|
|
|
} |
|
|
|
|
for (int i = 0; i < file_->dependency_count(); i++) { |
|
|
|
|
const FileDescriptor *dep = file_->dependency(i); |
|
|
|
|
bool public_import = (public_import_names.count(dep->name()) != 0); |
|
|
|
|
if (!public_import) { |
|
|
|
|
import_writer.AddFile(dep, header_extension); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -321,14 +315,11 @@ void FileGenerator::GenerateSource(io::Printer *printer) { |
|
|
|
|
"}\n"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const vector<FileGenerator *> &dependency_generators = |
|
|
|
|
DependencyGenerators(); |
|
|
|
|
for (vector<FileGenerator *>::const_iterator iter = |
|
|
|
|
dependency_generators.begin(); |
|
|
|
|
iter != dependency_generators.end(); ++iter) { |
|
|
|
|
for (int i = 0; i < file_->dependency_count(); i++) { |
|
|
|
|
const string root_class_name(FileClassName(file_->dependency(i))); |
|
|
|
|
printer->Print( |
|
|
|
|
"[registry addExtensions:[$dependency$ extensionRegistry]];\n", |
|
|
|
|
"dependency", (*iter)->RootClassName()); |
|
|
|
|
"dependency", root_class_name); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
printer->Outdent(); |
|
|
|
@ -393,24 +384,6 @@ void FileGenerator::GenerateSource(io::Printer *printer) { |
|
|
|
|
"// @@protoc_insertion_point(global_scope)\n"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const vector<FileGenerator *> &FileGenerator::DependencyGenerators() { |
|
|
|
|
if (file_->dependency_count() != dependency_generators_.size()) { |
|
|
|
|
set<string> public_import_names; |
|
|
|
|
for (int i = 0; i < file_->public_dependency_count(); i++) { |
|
|
|
|
public_import_names.insert(file_->public_dependency(i)->name()); |
|
|
|
|
} |
|
|
|
|
for (int i = 0; i < file_->dependency_count(); i++) { |
|
|
|
|
FileGenerator *generator = |
|
|
|
|
new FileGenerator(file_->dependency(i), options_); |
|
|
|
|
const string& name = file_->dependency(i)->name(); |
|
|
|
|
bool public_import = (public_import_names.count(name) != 0); |
|
|
|
|
generator->SetIsPublicDependency(public_import); |
|
|
|
|
dependency_generators_.push_back(generator); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return dependency_generators_; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 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.
|
|
|
|
|