Index: third_party/protobuf/src/google/protobuf/compiler/mock_code_generator.cc |
diff --git a/third_party/protobuf/src/google/protobuf/compiler/mock_code_generator.cc b/third_party/protobuf/src/google/protobuf/compiler/mock_code_generator.cc |
index 83d5a4e457a16a91e5af7692c23e26f195152e36..5b76af257792472748d0ac397580d7c1d05f5343 100644 |
--- a/third_party/protobuf/src/google/protobuf/compiler/mock_code_generator.cc |
+++ b/third_party/protobuf/src/google/protobuf/compiler/mock_code_generator.cc |
@@ -45,6 +45,16 @@ namespace google { |
namespace protobuf { |
namespace compiler { |
+// Returns the list of the names of files in all_files in the form of a |
+// comma-separated string. |
+string CommaSeparatedList(const vector<const FileDescriptor*> all_files) { |
+ vector<string> names; |
+ for (int i = 0; i < all_files.size(); i++) { |
+ names.push_back(all_files[i]->name()); |
+ } |
+ return JoinStrings(names, ","); |
+} |
+ |
static const char* kFirstInsertionPointName = "first_mock_insertion_point"; |
static const char* kSecondInsertionPointName = "second_mock_insertion_point"; |
static const char* kFirstInsertionPoint = |
@@ -63,6 +73,7 @@ void MockCodeGenerator::ExpectGenerated( |
const string& insertions, |
const string& file, |
const string& first_message_name, |
+ const string& first_parsed_file_name, |
const string& output_directory) { |
string content; |
ASSERT_TRUE(File::ReadFileToString( |
@@ -84,7 +95,8 @@ void MockCodeGenerator::ExpectGenerated( |
} |
ASSERT_EQ(lines.size(), 3 + insertion_list.size() * 2); |
- EXPECT_EQ(GetOutputFileContent(name, parameter, file, first_message_name), |
+ EXPECT_EQ(GetOutputFileContent(name, parameter, file, |
+ first_parsed_file_name, first_message_name), |
lines[0]); |
EXPECT_EQ(kFirstInsertionPoint, lines[1 + insertion_list.size()]); |
@@ -92,12 +104,12 @@ void MockCodeGenerator::ExpectGenerated( |
for (int i = 0; i < insertion_list.size(); i++) { |
EXPECT_EQ(GetOutputFileContent(insertion_list[i], "first_insert", |
- file, first_message_name), |
+ file, file, first_message_name), |
lines[1 + i]); |
// Second insertion point is indented, so the inserted text should |
// automatically be indented too. |
EXPECT_EQ(" " + GetOutputFileContent(insertion_list[i], "second_insert", |
- file, first_message_name), |
+ file, file, first_message_name), |
lines[2 + insertion_list.size() + i]); |
} |
} |
@@ -105,7 +117,7 @@ void MockCodeGenerator::ExpectGenerated( |
bool MockCodeGenerator::Generate( |
const FileDescriptor* file, |
const string& parameter, |
- OutputDirectory* output_directory, |
+ GeneratorContext* context, |
string* error) const { |
for (int i = 0; i < file->message_type_count(); i++) { |
if (HasPrefixString(file->message_type(i)->name(), "MockCodeGenerator_")) { |
@@ -134,11 +146,12 @@ bool MockCodeGenerator::Generate( |
for (int i = 0; i < insert_into.size(); i++) { |
{ |
scoped_ptr<io::ZeroCopyOutputStream> output( |
- output_directory->OpenForInsert( |
+ context->OpenForInsert( |
GetOutputFileName(insert_into[i], file), |
kFirstInsertionPointName)); |
io::Printer printer(output.get(), '$'); |
- printer.PrintRaw(GetOutputFileContent(name_, "first_insert", file)); |
+ printer.PrintRaw(GetOutputFileContent(name_, "first_insert", |
+ file, context)); |
if (printer.failed()) { |
*error = "MockCodeGenerator detected write error."; |
return false; |
@@ -147,11 +160,12 @@ bool MockCodeGenerator::Generate( |
{ |
scoped_ptr<io::ZeroCopyOutputStream> output( |
- output_directory->OpenForInsert( |
+ context->OpenForInsert( |
GetOutputFileName(insert_into[i], file), |
kSecondInsertionPointName)); |
io::Printer printer(output.get(), '$'); |
- printer.PrintRaw(GetOutputFileContent(name_, "second_insert", file)); |
+ printer.PrintRaw(GetOutputFileContent(name_, "second_insert", |
+ file, context)); |
if (printer.failed()) { |
*error = "MockCodeGenerator detected write error."; |
return false; |
@@ -160,10 +174,11 @@ bool MockCodeGenerator::Generate( |
} |
} else { |
scoped_ptr<io::ZeroCopyOutputStream> output( |
- output_directory->Open(GetOutputFileName(name_, file))); |
+ context->Open(GetOutputFileName(name_, file))); |
io::Printer printer(output.get(), '$'); |
- printer.PrintRaw(GetOutputFileContent(name_, parameter, file)); |
+ printer.PrintRaw(GetOutputFileContent(name_, parameter, |
+ file, context)); |
printer.PrintRaw(kFirstInsertionPoint); |
printer.PrintRaw(kSecondInsertionPoint); |
@@ -186,11 +201,16 @@ string MockCodeGenerator::GetOutputFileName(const string& generator_name, |
return file + ".MockCodeGenerator." + generator_name; |
} |
-string MockCodeGenerator::GetOutputFileContent(const string& generator_name, |
- const string& parameter, |
- const FileDescriptor* file) { |
+string MockCodeGenerator::GetOutputFileContent( |
+ const string& generator_name, |
+ const string& parameter, |
+ const FileDescriptor* file, |
+ GeneratorContext *context) { |
+ vector<const FileDescriptor*> all_files; |
+ context->ListParsedFiles(&all_files); |
return GetOutputFileContent( |
generator_name, parameter, file->name(), |
+ CommaSeparatedList(all_files), |
file->message_type_count() > 0 ? |
file->message_type(0)->name() : "(none)"); |
} |
@@ -199,9 +219,11 @@ string MockCodeGenerator::GetOutputFileContent( |
const string& generator_name, |
const string& parameter, |
const string& file, |
+ const string& parsed_file_list, |
const string& first_message_name) { |
- return strings::Substitute("$0: $1, $2, $3\n", |
- generator_name, parameter, file, first_message_name); |
+ return strings::Substitute("$0: $1, $2, $3, $4\n", |
+ generator_name, parameter, file, |
+ first_message_name, parsed_file_list); |
} |
} // namespace compiler |