forked from qt-creator/qt-creator
Clang: Add isInPrecompiledHeader to the file status table
It will useful to find out if we have to wait for an updated precompiled header. Change-Id: I6a314f278485965571cc6e46982bbd6f5523c581 Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
This commit is contained in:
@@ -76,9 +76,7 @@ public:
|
||||
const clang::FileEntry *fileEntry = m_sourceManager.getFileEntryForID(
|
||||
m_sourceManager.getFileID(sourceLocation));
|
||||
if (fileEntry) {
|
||||
m_fileStatuses.emplace_back(filePathId(fileEntry),
|
||||
fileEntry->getSize(),
|
||||
fileEntry->getModificationTime());
|
||||
addFileStatus(fileEntry);
|
||||
addSourceFile(fileEntry);
|
||||
}
|
||||
}
|
||||
@@ -258,16 +256,36 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
void addSourceFile(const clang::FileEntry *file)
|
||||
void addSourceFile(const clang::FileEntry *fileEntry)
|
||||
{
|
||||
auto id = filePathId(file);
|
||||
auto id = filePathId(fileEntry);
|
||||
|
||||
auto found = std::find(m_sourceFiles.begin(), m_sourceFiles.end(), id);
|
||||
auto found = std::lower_bound(m_sourceFiles.begin(), m_sourceFiles.end(), id);
|
||||
|
||||
if (found == m_sourceFiles.end() || *found != id)
|
||||
m_sourceFiles.insert(found, id);
|
||||
}
|
||||
|
||||
void addFileStatus(const clang::FileEntry *fileEntry)
|
||||
{
|
||||
auto id = filePathId(fileEntry);
|
||||
|
||||
auto found = std::lower_bound(m_fileStatuses.begin(),
|
||||
m_fileStatuses.end(),
|
||||
id,
|
||||
[] (const auto &first, const auto &second) {
|
||||
return first.filePathId < second;
|
||||
});
|
||||
|
||||
if (found == m_fileStatuses.end() || found->filePathId != id) {
|
||||
m_fileStatuses.emplace(found,
|
||||
id,
|
||||
fileEntry->getSize(),
|
||||
fileEntry->getModificationTime(),
|
||||
fileEntry->isInPCH());
|
||||
}
|
||||
}
|
||||
|
||||
void addSourceDependency(const clang::FileEntry *file, clang::SourceLocation includeLocation)
|
||||
{
|
||||
auto includeFilePathId = filePathId(includeLocation);
|
||||
|
||||
@@ -37,11 +37,13 @@ class FileStatus
|
||||
{
|
||||
public:
|
||||
FileStatus(FilePathId filePathId,
|
||||
off_t size,
|
||||
std::time_t lastModified)
|
||||
off_t size,
|
||||
std::time_t lastModified,
|
||||
bool isInPrecompiledHeader)
|
||||
: filePathId(filePathId),
|
||||
size(size),
|
||||
lastModified(lastModified)
|
||||
lastModified(lastModified),
|
||||
isInPrecompiledHeader(isInPrecompiledHeader)
|
||||
{}
|
||||
|
||||
friend
|
||||
@@ -56,6 +58,7 @@ public:
|
||||
FilePathId filePathId;
|
||||
off_t size;
|
||||
std::time_t lastModified;
|
||||
bool isInPrecompiledHeader;
|
||||
};
|
||||
|
||||
using FileStatuses = std::vector<FileStatus>;
|
||||
|
||||
@@ -198,7 +198,7 @@ public:
|
||||
database
|
||||
};
|
||||
WriteStatement insertFileStatuses{
|
||||
"INSERT OR REPLACE INTO fileStatuses(sourceId, size, lastModified) VALUES (?,?,?)",
|
||||
"INSERT OR REPLACE INTO fileStatuses(sourceId, size, lastModified, isInPrecompiledHeader) VALUES (?,?,?,?)",
|
||||
database
|
||||
};
|
||||
WriteStatement insertIntoNewSourceDependenciesStatement{
|
||||
|
||||
@@ -156,7 +156,8 @@ public:
|
||||
for (const FileStatus &fileStatus : fileStatuses)
|
||||
statement.write(fileStatus.filePathId.filePathId,
|
||||
fileStatus.size,
|
||||
fileStatus.lastModified);
|
||||
fileStatus.lastModified,
|
||||
fileStatus.isInPrecompiledHeader);
|
||||
}
|
||||
|
||||
static Utils::SmallString toJson(const Utils::SmallStringVector &strings)
|
||||
|
||||
Reference in New Issue
Block a user