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