From 6793c1af264cf3a85bfa74006baf291f2f9be16e Mon Sep 17 00:00:00 2001 From: "kenton@google.com" Date: Mon, 5 Apr 2010 21:45:45 +0000 Subject: Use full paths when writing MSVS-style errors. Patch from Oleg Smolsky. --- src/google/protobuf/compiler/command_line_interface.cc | 16 +++++++++++++--- .../protobuf/compiler/command_line_interface_unittest.cc | 2 +- 2 files changed, 14 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/google/protobuf/compiler/command_line_interface.cc b/src/google/protobuf/compiler/command_line_interface.cc index d3495ca6..02c3e0f9 100644 --- a/src/google/protobuf/compiler/command_line_interface.cc +++ b/src/google/protobuf/compiler/command_line_interface.cc @@ -182,14 +182,23 @@ bool TryCreateParentDirectory(const string& prefix, const string& filename) { class CommandLineInterface::ErrorPrinter : public MultiFileErrorCollector, public io::ErrorCollector { public: - ErrorPrinter(ErrorFormat format) : format_(format) {} + ErrorPrinter(ErrorFormat format, DiskSourceTree *tree = NULL) + : format_(format), tree_(tree) {} ~ErrorPrinter() {} // implements MultiFileErrorCollector ------------------------------ void AddError(const string& filename, int line, int column, const string& message) { - cerr << filename; + // Print full path when running under MSVS + std::string dfile; + if (format_ == CommandLineInterface::ERROR_FORMAT_MSVS && + tree_ != NULL && + tree_->VirtualFileToDiskFile(filename, &dfile)) { + cerr << dfile; + } else { + cerr << filename; + } // Users typically expect 1-based line/column numbers, so we add 1 // to each here. @@ -215,6 +224,7 @@ class CommandLineInterface::ErrorPrinter : public MultiFileErrorCollector, private: const ErrorFormat format_; + DiskSourceTree *tree_; }; // ------------------------------------------------------------------- @@ -583,7 +593,7 @@ int CommandLineInterface::Run(int argc, const char* const argv[]) { } // Allocate the Importer. - ErrorPrinter error_collector(error_format_); + ErrorPrinter error_collector(error_format_, &source_tree); Importer importer(&source_tree, &error_collector); vector parsed_files; diff --git a/src/google/protobuf/compiler/command_line_interface_unittest.cc b/src/google/protobuf/compiler/command_line_interface_unittest.cc index 9129ebf0..bdf37ad1 100644 --- a/src/google/protobuf/compiler/command_line_interface_unittest.cc +++ b/src/google/protobuf/compiler/command_line_interface_unittest.cc @@ -1153,7 +1153,7 @@ TEST_F(CommandLineInterfaceTest, MsvsFormatErrors) { "--proto_path=$tmpdir --error_format=msvs foo.proto"); ExpectErrorText( - "foo.proto(2) : error in column=1: Expected top-level statement " + "$tmpdir/foo.proto(2) : error in column=1: Expected top-level statement " "(e.g. \"message\").\n"); } -- cgit v1.2.3