From d56a9afe24a875461fb14be73c0517307c52de00 Mon Sep 17 00:00:00 2001 From: Eberhard Graether Date: Fri, 24 Apr 2015 00:37:40 +0200 Subject: [PATCH] data: Only show parse errors in project files --- src/lib/data/parser/cxx/CxxDiagnosticConsumer.cpp | 9 ++++++++- src/lib/data/parser/cxx/CxxDiagnosticConsumer.h | 10 +++++++++- src/lib/data/parser/cxx/CxxParser.cpp | 3 ++- src/test/StorageTestSuite.h | 1 + 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/lib/data/parser/cxx/CxxDiagnosticConsumer.cpp b/src/lib/data/parser/cxx/CxxDiagnosticConsumer.cpp index 5cefa272..bedd68b8 100644 --- a/src/lib/data/parser/cxx/CxxDiagnosticConsumer.cpp +++ b/src/lib/data/parser/cxx/CxxDiagnosticConsumer.cpp @@ -2,6 +2,8 @@ #include "clang/Basic/SourceManager.h" +#include "utility/file/FileManager.h" + #include "data/parser/ParseLocation.h" #include "data/parser/ParserClient.h" @@ -9,10 +11,12 @@ CxxDiagnosticConsumer::CxxDiagnosticConsumer( clang::raw_ostream &os, clang::DiagnosticOptions *diags, ParserClient* client, + const FileManager* fileManager, bool useLogging ) : clang::TextDiagnosticPrinter(os, diags) , m_client(client) + , m_fileManager(fileManager) , m_isParsingFile(false) , m_useLogging(useLogging) { @@ -70,6 +74,9 @@ void CxxDiagnosticConsumer::HandleDiagnostic(clang::DiagnosticsEngine::Level lev column = presumedLocation.getColumn(); } - m_client->onError(ParseLocation(filePath, line, column), message); + if (m_fileManager->hasFilePath(filePath)) + { + m_client->onError(ParseLocation(filePath, line, column), message); + } } } diff --git a/src/lib/data/parser/cxx/CxxDiagnosticConsumer.h b/src/lib/data/parser/cxx/CxxDiagnosticConsumer.h index ac437c6e..7b4b38f2 100644 --- a/src/lib/data/parser/cxx/CxxDiagnosticConsumer.h +++ b/src/lib/data/parser/cxx/CxxDiagnosticConsumer.h @@ -3,13 +3,20 @@ #include "clang/Frontend/TextDiagnosticPrinter.h" +class FileManager; class ParserClient; class CxxDiagnosticConsumer : public clang::TextDiagnosticPrinter { public: - CxxDiagnosticConsumer(clang::raw_ostream &os, clang::DiagnosticOptions *diags, ParserClient* client, bool useLogging = true); + CxxDiagnosticConsumer( + clang::raw_ostream &os, + clang::DiagnosticOptions *diags, + ParserClient* client, + const FileManager* fileManager, + bool useLogging = true + ); void BeginSourceFile(const clang::LangOptions& langOptions, const clang::Preprocessor* preProcessor); void EndSourceFile(); @@ -18,6 +25,7 @@ public: private: ParserClient* m_client; + const FileManager* m_fileManager; bool m_isParsingFile; bool m_useLogging; }; diff --git a/src/lib/data/parser/cxx/CxxParser.cpp b/src/lib/data/parser/cxx/CxxParser.cpp index 6dbcef85..e01ce68d 100644 --- a/src/lib/data/parser/cxx/CxxParser.cpp +++ b/src/lib/data/parser/cxx/CxxParser.cpp @@ -165,7 +165,8 @@ std::shared_ptr CxxParser::getCompilat std::shared_ptr CxxParser::getDiagnostics(const Arguments& arguments) const { llvm::IntrusiveRefCntPtr options = new clang::DiagnosticOptions(); - return std::make_shared(llvm::errs(), &*options, m_client, arguments.logErrors); + return std::make_shared( + llvm::errs(), &*options, m_client, m_fileRegister->getFileManager(), arguments.logErrors); } void CxxParser::setupParsing(const std::vector& filePaths, const Arguments& arguments) diff --git a/src/test/StorageTestSuite.h b/src/test/StorageTestSuite.h index 0e3d0c19..1535b648 100644 --- a/src/test/StorageTestSuite.h +++ b/src/test/StorageTestSuite.h @@ -13,6 +13,7 @@ #include "data/parser/ParseVariable.h" #include "data/Storage.h" #include "data/type/DataType.h" +#include "data/type/NamedDataType.h" class StorageTestSuite: public CxxTest::TestSuite {