Index: third_party/protobuf/src/google/protobuf/compiler/plugin.cc |
diff --git a/third_party/protobuf/src/google/protobuf/compiler/plugin.cc b/third_party/protobuf/src/google/protobuf/compiler/plugin.cc |
index 3848101d1fd854490021525cdab6223440fb98fe..2ff50f61f47a8dde1796dbd6f1d7372ba1775b85 100644 |
--- a/third_party/protobuf/src/google/protobuf/compiler/plugin.cc |
+++ b/third_party/protobuf/src/google/protobuf/compiler/plugin.cc |
@@ -62,12 +62,9 @@ namespace compiler { |
class GeneratorResponseContext : public GeneratorContext { |
public: |
- GeneratorResponseContext( |
- const Version& compiler_version, |
- CodeGeneratorResponse* response, |
- const std::vector<const FileDescriptor*>& parsed_files) |
- : compiler_version_(compiler_version), |
- response_(response), |
+ GeneratorResponseContext(CodeGeneratorResponse* response, |
+ const vector<const FileDescriptor*>& parsed_files) |
+ : response_(response), |
parsed_files_(parsed_files) {} |
virtual ~GeneratorResponseContext() {} |
@@ -87,18 +84,13 @@ class GeneratorResponseContext : public GeneratorContext { |
return new io::StringOutputStream(file->mutable_content()); |
} |
- void ListParsedFiles(std::vector<const FileDescriptor*>* output) { |
+ void ListParsedFiles(vector<const FileDescriptor*>* output) { |
*output = parsed_files_; |
} |
- void GetCompilerVersion(Version* version) const { |
- *version = compiler_version_; |
- } |
- |
private: |
- Version compiler_version_; |
CodeGeneratorResponse* response_; |
- const std::vector<const FileDescriptor*>& parsed_files_; |
+ const vector<const FileDescriptor*>& parsed_files_; |
}; |
bool GenerateCode(const CodeGeneratorRequest& request, |
@@ -113,7 +105,7 @@ bool GenerateCode(const CodeGeneratorRequest& request, |
} |
} |
- std::vector<const FileDescriptor*> parsed_files; |
+ vector<const FileDescriptor*> parsed_files; |
for (int i = 0; i < request.file_to_generate_size(); i++) { |
parsed_files.push_back(pool.FindFileByName(request.file_to_generate(i))); |
if (parsed_files.back() == NULL) { |
@@ -124,19 +116,37 @@ bool GenerateCode(const CodeGeneratorRequest& request, |
} |
} |
- GeneratorResponseContext context( |
- request.compiler_version(), response, parsed_files); |
+ GeneratorResponseContext context(response, parsed_files); |
- string error; |
- bool succeeded = generator.GenerateAll( |
- parsed_files, request.parameter(), &context, &error); |
+ if (generator.HasGenerateAll()) { |
+ string error; |
+ bool succeeded = generator.GenerateAll( |
+ parsed_files, request.parameter(), &context, &error); |
- if (!succeeded && error.empty()) { |
- error = "Code generator returned false but provided no error " |
- "description."; |
- } |
- if (!error.empty()) { |
- response->set_error(error); |
+ if (!succeeded && error.empty()) { |
+ error = "Code generator returned false but provided no error " |
+ "description."; |
+ } |
+ if (!error.empty()) { |
+ response->set_error(error); |
+ } |
+ } else { |
+ for (int i = 0; i < parsed_files.size(); i++) { |
+ const FileDescriptor* file = parsed_files[i]; |
+ |
+ string error; |
+ bool succeeded = generator.Generate( |
+ file, request.parameter(), &context, &error); |
+ |
+ if (!succeeded && error.empty()) { |
+ error = "Code generator returned false but provided no error " |
+ "description."; |
+ } |
+ if (!error.empty()) { |
+ response->set_error(file->name() + ": " + error); |
+ break; |
+ } |
+ } |
} |
return true; |