aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Thomas Van Lenten <thomasvl@google.com>2016-08-23 11:14:18 -0400
committerGravatar Thomas Van Lenten <thomasvl@google.com>2016-08-23 11:19:38 -0400
commit290d26b46266bb8e0ddcc542cf465719135b401a (patch)
tree263afd80cda7753ddc9bb6fdffe885531c69169d
parent93362a5aa552a7797a54efd05ccc678348ff9ef7 (diff)
Remove the compiler options from ImportWriter.
Breaks the tie of the ImportWriter to the ObjC generation, allow grpc to use a different extension and to relay the values they need for these. - Pass in the two framework options to the ctor. - Pass in the header extension to AddFile.
-rw-r--r--src/google/protobuf/compiler/objectivec/objectivec_file.cc18
-rw-r--r--src/google/protobuf/compiler/objectivec/objectivec_helpers.cc35
-rw-r--r--src/google/protobuf/compiler/objectivec/objectivec_helpers.h11
3 files changed, 42 insertions, 22 deletions
diff --git a/src/google/protobuf/compiler/objectivec/objectivec_file.cc b/src/google/protobuf/compiler/objectivec/objectivec_file.cc
index 26babad5..1b7b2783 100644
--- a/src/google/protobuf/compiler/objectivec/objectivec_file.cc
+++ b/src/google/protobuf/compiler/objectivec/objectivec_file.cc
@@ -51,6 +51,8 @@ namespace protobuf {
// runtime being used.
const int32 GOOGLE_PROTOBUF_OBJC_GEN_VERSION = 30001;
+const char* kHeaderExtension = ".pbobjc.h";
+
namespace compiler {
namespace objectivec {
@@ -100,13 +102,16 @@ void FileGenerator::GenerateHeader(io::Printer *printer) {
// #import any headers for "public imports" in the proto file.
{
- ImportWriter import_writer(options_);
+ 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_);
+ import_writer.AddFile((*iter)->file_, header_extension);
}
}
import_writer.Print(printer);
@@ -208,10 +213,13 @@ void FileGenerator::GenerateSource(io::Printer *printer) {
PrintFileRuntimePreamble(printer, "GPBProtocolBuffers_RuntimeSupport.h");
{
- ImportWriter import_writer(options_);
+ ImportWriter import_writer(
+ options_.generate_for_named_framework,
+ options_.named_framework_to_proto_path_mappings_path);
+ const string header_extension(kHeaderExtension);
// #import the header for this proto file.
- import_writer.AddFile(file_);
+ import_writer.AddFile(file_, header_extension);
// #import the headers for anything that a plain dependency of this proto
// file (that means they were just an include, not a "public" include).
@@ -221,7 +229,7 @@ void FileGenerator::GenerateSource(io::Printer *printer) {
dependency_generators.begin();
iter != dependency_generators.end(); ++iter) {
if (!(*iter)->IsPublicDependency()) {
- import_writer.AddFile((*iter)->file_);
+ import_writer.AddFile((*iter)->file_, header_extension);
}
}
diff --git a/src/google/protobuf/compiler/objectivec/objectivec_helpers.cc b/src/google/protobuf/compiler/objectivec/objectivec_helpers.cc
index a1de635e..009d57f9 100644
--- a/src/google/protobuf/compiler/objectivec/objectivec_helpers.cc
+++ b/src/google/protobuf/compiler/objectivec/objectivec_helpers.cc
@@ -1434,14 +1434,25 @@ bool ParseSimpleFile(
return parser.Finish();
}
-void ImportWriter::AddFile(const FileDescriptor* file) {
- const string extension(".pbobjc.h");
+ImportWriter::ImportWriter(
+ const string& generate_for_named_framework,
+ const string& named_framework_to_proto_path_mappings_path)
+ : generate_for_named_framework_(generate_for_named_framework),
+ named_framework_to_proto_path_mappings_path_(
+ named_framework_to_proto_path_mappings_path),
+ need_to_parse_mapping_file_(true) {
+}
+
+ImportWriter::~ImportWriter() {}
+
+void ImportWriter::AddFile(const FileDescriptor* file,
+ const string& header_extension) {
const string file_path(FilePath(file));
if (IsProtobufLibraryBundledProtoFile(file)) {
protobuf_framework_imports_.push_back(
- FilePathBasename(file) + extension);
- protobuf_non_framework_imports_.push_back(file_path + extension);
+ FilePathBasename(file) + header_extension);
+ protobuf_non_framework_imports_.push_back(file_path + header_extension);
return;
}
@@ -1455,18 +1466,18 @@ void ImportWriter::AddFile(const FileDescriptor* file) {
if (proto_lookup != proto_file_to_framework_name_.end()) {
other_framework_imports_.push_back(
proto_lookup->second + "/" +
- FilePathBasename(file) + extension);
+ FilePathBasename(file) + header_extension);
return;
}
- if (!options_.generate_for_named_framework.empty()) {
+ if (!generate_for_named_framework_.empty()) {
other_framework_imports_.push_back(
- options_.generate_for_named_framework + "/" +
- FilePathBasename(file) + extension);
+ generate_for_named_framework_ + "/" +
+ FilePathBasename(file) + header_extension);
return;
}
- other_imports_.push_back(file_path + extension);
+ other_imports_.push_back(file_path + header_extension);
}
void ImportWriter::Print(io::Printer* printer) const {
@@ -1534,15 +1545,15 @@ void ImportWriter::Print(io::Printer* printer) const {
void ImportWriter::ParseFrameworkMappings() {
need_to_parse_mapping_file_ = false;
- if (options_.named_framework_to_proto_path_mappings_path.empty()) {
+ if (named_framework_to_proto_path_mappings_path_.empty()) {
return; // Nothing to do.
}
ProtoFrameworkCollector collector(&proto_file_to_framework_name_);
string parse_error;
- if (!ParseSimpleFile(options_.named_framework_to_proto_path_mappings_path,
+ if (!ParseSimpleFile(named_framework_to_proto_path_mappings_path_,
&collector, &parse_error)) {
- cerr << "error parsing " << options_.named_framework_to_proto_path_mappings_path
+ cerr << "error parsing " << named_framework_to_proto_path_mappings_path_
<< " : " << parse_error << endl;
cerr.flush();
}
diff --git a/src/google/protobuf/compiler/objectivec/objectivec_helpers.h b/src/google/protobuf/compiler/objectivec/objectivec_helpers.h
index db303154..344723a6 100644
--- a/src/google/protobuf/compiler/objectivec/objectivec_helpers.h
+++ b/src/google/protobuf/compiler/objectivec/objectivec_helpers.h
@@ -230,11 +230,11 @@ bool ParseSimpleFile(
// import statements.
class LIBPROTOC_EXPORT ImportWriter {
public:
- ImportWriter(const Options& options)
- : options_(options),
- need_to_parse_mapping_file_(true) {}
+ ImportWriter(const string& generate_for_named_framework,
+ const string& named_framework_to_proto_path_mappings_path);
+ ~ImportWriter();
- void AddFile(const FileDescriptor* file);
+ void AddFile(const FileDescriptor* file, const string& header_extension);
void Print(io::Printer *printer) const;
private:
@@ -251,7 +251,8 @@ class LIBPROTOC_EXPORT ImportWriter {
void ParseFrameworkMappings();
- const Options options_;
+ const string generate_for_named_framework_;
+ const string named_framework_to_proto_path_mappings_path_;
map<string, string> proto_file_to_framework_name_;
bool need_to_parse_mapping_file_;