logic: Changed include files being analyzed solely by path

* removed header extensions
* added source extensions to source path setup screen
* added caching to hasFilePath check
* don't show header list in CDB setup
* removed TestSettings.xml
This commit is contained in:
Eberhard Graether
2016-05-19 21:47:09 +02:00
parent 5295267513
commit 86d1ff2905
26 changed files with 236 additions and 393 deletions
@@ -10,7 +10,6 @@
#include "data/parser/cxx/utilityCxx.h"
#include "data/parser/ParseLocation.h"
#include "utility/file/FileManager.h"
#include "utility/ScopedSwitcher.h"
// TODO: For an array access, X[I], skip over the array-to-pointer decay. We
@@ -1534,9 +1533,9 @@ bool ASTVisitor::isLocatedInProjectFile(clang::SourceLocation loc)
{
fileId = sourceManager.getFileID(spellingLoc);
}
if (!fileId.isInvalid())
{
auto it = m_inProjectFileMap.find(fileId);
if (it != m_inProjectFileMap.end())
{
@@ -1548,11 +1547,12 @@ bool ASTVisitor::isLocatedInProjectFile(clang::SourceLocation loc)
{
std::string fileName = fileEntry->getName();
FilePath filePath = FilePath(fileName).canonical();
bool ret = m_fileRegister->getFileManager()->hasFilePath(filePath.str());
bool ret = m_fileRegister->hasFilePath(filePath.str());
m_inProjectFileMap[fileId] = ret;
return ret;
}
}
return false;
}
@@ -2,7 +2,6 @@
#include "data/parser/ParseLocation.h"
#include "data/parser/ParserClient.h"
#include "utility/file/FileManager.h"
#include "utility/file/FileRegister.h"
CommentHandler::CommentHandler(ParserClient* client, FileRegister* fileRegister)
@@ -22,7 +21,7 @@ bool CommentHandler::HandleComment(clang::Preprocessor& preprocessor, clang::Sou
const clang::PresumedLoc& presumedEnd = sourceManager.getPresumedLoc(sourceRange.getEnd(), false);
FilePath filePath = FilePath(presumedBegin.getFilename());
if (m_fileRegister->getFileManager()->hasFilePath(filePath) && !m_fileRegister->fileIsParsed(filePath))
if (m_fileRegister->hasFilePath(filePath) && !m_fileRegister->fileIsParsed(filePath))
{
m_client->onCommentParsed(ParseLocation(
presumedBegin.getFilename(),
@@ -2,8 +2,6 @@
#include "clang/Basic/SourceManager.h"
#include "utility/file/FileManager.h"
#include "data/parser/ParseLocation.h"
#include "data/parser/ParserClient.h"
@@ -11,12 +9,10 @@ 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)
{
@@ -79,10 +75,6 @@ void CxxDiagnosticConsumer::HandleDiagnostic(clang::DiagnosticsEngine::Level lev
column = presumedLocation.getColumn();
}
// if (m_fileManager->hasFilePath(filePath))
if (m_fileManager)
{
m_client->onError(ParseLocation(filePath, line, column), message, (level == clang::DiagnosticsEngine::Fatal));
}
m_client->onError(ParseLocation(filePath, line, column), message, (level == clang::DiagnosticsEngine::Fatal));
}
}
@@ -3,7 +3,6 @@
#include "clang/Frontend/TextDiagnosticPrinter.h"
class FileManager;
class ParserClient;
class CxxDiagnosticConsumer
@@ -14,7 +13,6 @@ public:
clang::raw_ostream &os,
clang::DiagnosticOptions *diags,
ParserClient* client,
const FileManager* fileManager,
bool useLogging = true
);
@@ -25,7 +23,6 @@ public:
private:
ParserClient* m_client;
const FileManager* m_fileManager;
bool m_isParsingFile;
bool m_useLogging;
};
+1 -1
View File
@@ -179,7 +179,7 @@ std::shared_ptr<CxxDiagnosticConsumer> CxxParser::getDiagnostics(const Arguments
{
llvm::IntrusiveRefCntPtr<clang::DiagnosticOptions> options = new clang::DiagnosticOptions();
return std::make_shared<CxxDiagnosticConsumer>(
llvm::errs(), &*options, m_client, m_fileRegister->getFileManager(), arguments.logErrors);
llvm::errs(), &*options, m_client, arguments.logErrors);
}
void CxxParser::setupParsing(const Arguments& arguments)
@@ -1,11 +1,9 @@
#include "data/parser/cxx/PreprocessorCallbacks.h"
#include "clang/Driver/Util.h"
#include "clang/Basic/IdentifierTable.h"
#include "clang/Lex/MacroArgs.h"
#include "utility/file/FileManager.h"
#include "utility/file/FileRegister.h"
#include "data/parser/ParserClient.h"
@@ -29,19 +27,17 @@ void PreprocessorCallbacks::FileChanged(
}
const clang::FileEntry *fileEntry = m_sourceManager.getFileEntryForID(m_sourceManager.getFileID(location));
if (!fileEntry)
{
return;
}
FilePath filePath(fileEntry->getName());
filePath = filePath.canonical();
FilePath filePath = FilePath(fileEntry->getName()).canonical();
if (m_fileRegister->getFileManager()->hasFilePath(filePath.str()))
if (m_fileRegister->hasFilePath(filePath) && !m_fileRegister->includeFileIsParsed(filePath))
{
m_client->onFileParsed(m_fileRegister->getFileManager()->getFileInfo(filePath));
m_fileRegister->markIncludeFileParsing(filePath.str());
m_client->onFileParsed(m_fileRegister->getFileInfo(filePath));
m_fileRegister->markIncludeFileParsing(filePath);
}
}
@@ -54,16 +50,18 @@ void PreprocessorCallbacks::InclusionDirective(
if (fileEntry && baseFileEntry)
{
FilePath baseFilePath = FilePath(baseFileEntry->getName()).canonical();
FilePath includedFilePath = FilePath(fileEntry->getName()).canonical();
if (!m_fileRegister->hasFilePath(baseFilePath) || m_fileRegister->fileIsParsed(baseFilePath))
{
return;
}
const FileManager* fileManager = m_fileRegister->getFileManager();
if (fileManager->hasFilePath(baseFilePath) && fileManager->hasFilePath(includedFilePath) &&
!m_fileRegister->fileIsParsed(baseFilePath))
FilePath includedFilePath = FilePath(fileEntry->getName()).canonical();
if (m_fileRegister->hasFilePath(includedFilePath))
{
m_client->onFileIncludeParsed(
getParseLocation(fileNameRange.getAsRange()),
fileManager->getFileInfo(baseFilePath),
fileManager->getFileInfo(includedFilePath)
m_fileRegister->getFileInfo(baseFilePath),
m_fileRegister->getFileInfo(includedFilePath)
);
}
}
@@ -78,7 +76,7 @@ void PreprocessorCallbacks::MacroDefined(const clang::Token& macroNameToken, con
}
FilePath filePath = FilePath(fileStr);
if (m_fileRegister->getFileManager()->hasFilePath(filePath) && !m_fileRegister->fileIsParsed(filePath))
if (m_fileRegister->hasFilePath(filePath) && !m_fileRegister->fileIsParsed(filePath))
{
// ignore builtin macros
if (m_sourceManager.getSpellingLoc(macroNameToken.getLocation()).printToString(m_sourceManager)[0] == '<')
@@ -105,7 +103,7 @@ void PreprocessorCallbacks::MacroExpands(
}
FilePath filePath = FilePath(fileStr);
if (m_fileRegister->getFileManager()->hasFilePath(filePath) && !m_fileRegister->fileIsParsed(filePath))
if (m_fileRegister->hasFilePath(filePath) && !m_fileRegister->fileIsParsed(filePath))
{
NameHierarchy nameHierarchy;
nameHierarchy.push(std::make_shared<NameElement>(macroNameToken.getIdentifierInfo()->getName().str()));