~ubuntu-branches/ubuntu/trusty/protobuf/trusty-proposed

« back to all changes in this revision

Viewing changes to src/google/protobuf/compiler/plugin.cc

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2011-05-31 14:41:47 UTC
  • mfrom: (2.2.8 sid)
  • Revision ID: james.westby@ubuntu.com-20110531144147-s41g5fozgvyo462l
Tags: 2.4.0a-2ubuntu1
* Merge with Debian; remaining changes:
  - Fix linking with -lpthread.

Show diffs side-by-side

added added

removed removed

Lines of Context:
59
59
namespace protobuf {
60
60
namespace compiler {
61
61
 
62
 
class GeneratorResponseOutputDirectory : public OutputDirectory {
 
62
class GeneratorResponseContext : public GeneratorContext {
63
63
 public:
64
 
  GeneratorResponseOutputDirectory(CodeGeneratorResponse* response)
65
 
      : response_(response) {}
66
 
  virtual ~GeneratorResponseOutputDirectory() {}
 
64
  GeneratorResponseContext(CodeGeneratorResponse* response,
 
65
                           const vector<const FileDescriptor*>& parsed_files)
 
66
      : response_(response),
 
67
        parsed_files_(parsed_files) {}
 
68
  virtual ~GeneratorResponseContext() {}
67
69
 
68
 
  // implements OutputDirectory --------------------------------------
 
70
  // implements GeneratorContext --------------------------------------
69
71
 
70
72
  virtual io::ZeroCopyOutputStream* Open(const string& filename) {
71
73
    CodeGeneratorResponse::File* file = response_->add_file();
81
83
    return new io::StringOutputStream(file->mutable_content());
82
84
  }
83
85
 
 
86
  void ListParsedFiles(vector<const FileDescriptor*>* output) {
 
87
    *output = parsed_files_;
 
88
  }
 
89
 
84
90
 private:
85
91
  CodeGeneratorResponse* response_;
 
92
  const vector<const FileDescriptor*>& parsed_files_;
86
93
};
87
94
 
88
95
int PluginMain(int argc, char* argv[], const CodeGenerator* generator) {
112
119
    }
113
120
  }
114
121
 
115
 
  CodeGeneratorResponse response;
116
 
  GeneratorResponseOutputDirectory output_directory(&response);
117
 
 
 
122
  vector<const FileDescriptor*> parsed_files;
118
123
  for (int i = 0; i < request.file_to_generate_size(); i++) {
119
 
    const FileDescriptor* file =
120
 
        pool.FindFileByName(request.file_to_generate(i));
121
 
    if (file == NULL) {
 
124
    parsed_files.push_back(pool.FindFileByName(request.file_to_generate(i)));
 
125
    if (parsed_files.back() == NULL) {
122
126
      cerr << argv[0] << ": protoc asked plugin to generate a file but "
123
127
              "did not provide a descriptor for the file: "
124
128
           << request.file_to_generate(i) << endl;
125
129
      return 1;
126
130
    }
 
131
  }
 
132
 
 
133
  CodeGeneratorResponse response;
 
134
  GeneratorResponseContext context(&response, parsed_files);
 
135
 
 
136
  for (int i = 0; i < parsed_files.size(); i++) {
 
137
    const FileDescriptor* file = parsed_files[i];
127
138
 
128
139
    string error;
129
140
    bool succeeded = generator->Generate(
130
 
        file, request.parameter(), &output_directory, &error);
 
141
        file, request.parameter(), &context, &error);
131
142
 
132
143
    if (!succeeded && error.empty()) {
133
144
      error = "Code generator returned false but provided no error "