aboutsummaryrefslogtreecommitdiffstats
path: root/src/tools/clangpchmanagerbackend/source/collectbuilddependencypreprocessorcallbacks.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/clangpchmanagerbackend/source/collectbuilddependencypreprocessorcallbacks.h')
-rw-r--r--src/tools/clangpchmanagerbackend/source/collectbuilddependencypreprocessorcallbacks.h134
1 files changed, 72 insertions, 62 deletions
diff --git a/src/tools/clangpchmanagerbackend/source/collectbuilddependencypreprocessorcallbacks.h b/src/tools/clangpchmanagerbackend/source/collectbuilddependencypreprocessorcallbacks.h
index 980d065fdb..f3b365d8d5 100644
--- a/src/tools/clangpchmanagerbackend/source/collectbuilddependencypreprocessorcallbacks.h
+++ b/src/tools/clangpchmanagerbackend/source/collectbuilddependencypreprocessorcallbacks.h
@@ -109,36 +109,46 @@ public:
clang::SrcMgr::CharacteristicKind fileType) override
{
clang::FileID currentFileId = m_sourceManager->getFileID(hashLocation);
- if (file && currentFileId != m_mainFileId) {
- addSourceDependency(file, hashLocation);
- auto fileUID = file->getUID();
- auto sourceFileUID = m_sourceManager
- ->getFileEntryForID(m_sourceManager->getFileID(hashLocation))
- ->getUID();
- auto notAlreadyIncluded = isNotAlreadyIncluded(fileUID);
- if (notAlreadyIncluded.first) {
- m_alreadyIncludedFileUIDs.insert(notAlreadyIncluded.second, fileUID);
- FilePath filePath = filePathFromFile(file);
- if (!filePath.empty()) {
- FilePathId includeId = m_filePathCache.filePathId(filePath);
-
- time_t lastModified = file->getModificationTime();
-
- SourceType sourceType = SourceType::UserInclude;
- if (isSystem(fileType)) {
- if (isInSystemHeader(hashLocation))
- sourceType = SourceType::SystemInclude;
- else
- sourceType = SourceType::TopSystemInclude;
- } else if (isNotInExcludedIncludeUID(fileUID)) {
- if (isInExcludedIncludeUID(sourceFileUID))
- sourceType = SourceType::TopProjectInclude;
- else
- sourceType = SourceType::ProjectInclude;
+ if (file) {
+ if (currentFileId != m_mainFileId) {
+ addSourceDependency(file, hashLocation);
+ auto fileUID = file->getUID();
+ auto sourceFileUID =
+ m_sourceManager
+ ->getFileEntryForID(
+ m_sourceManager->getFileID(hashLocation))
+ ->getUID();
+ auto notAlreadyIncluded = isNotAlreadyIncluded(fileUID);
+ if (notAlreadyIncluded.first) {
+ m_alreadyIncludedFileUIDs.insert(notAlreadyIncluded.second,
+ fileUID);
+ FilePath filePath = filePathFromFile(file);
+ if (!filePath.empty()) {
+ FilePathId includeId =
+ m_filePathCache.filePathId(filePath);
+
+ time_t lastModified = file->getModificationTime();
+
+ SourceType sourceType = SourceType::UserInclude;
+ if (isSystem(fileType)) {
+ if (isInSystemHeader(hashLocation))
+ sourceType = SourceType::SystemInclude;
+ else
+ sourceType = SourceType::TopSystemInclude;
+ } else if (isNotInExcludedIncludeUID(fileUID)) {
+ if (isInExcludedIncludeUID(sourceFileUID))
+ sourceType = SourceType::TopProjectInclude;
+ else
+ sourceType = SourceType::ProjectInclude;
+ }
+
+ addSource({includeId, sourceType, lastModified});
}
-
- addInclude({includeId, sourceType, lastModified});
}
+ } else {
+ addSource({m_filePathCache.filePathId(filePathFromFile(file)),
+ SourceType::Source,
+ file->getModificationTime()});
}
} else {
auto sourceFileId = filePathId(hashLocation);
@@ -194,10 +204,10 @@ public:
void appendContainsMissingIncludes(const FilePathIds &dependentSourceFilesWithMissingIncludes)
{
- auto split = m_containsMissingIncludes
- .insert(m_containsMissingIncludes.end(),
- dependentSourceFilesWithMissingIncludes.begin(),
- dependentSourceFilesWithMissingIncludes.end());
+ auto split = m_containsMissingIncludes.insert(
+ m_containsMissingIncludes.end(),
+ dependentSourceFilesWithMissingIncludes.begin(),
+ dependentSourceFilesWithMissingIncludes.end());
std::inplace_merge(m_containsMissingIncludes.begin(),
split,
m_containsMissingIncludes.end());
@@ -207,11 +217,13 @@ public:
{
FilePathIds filteredDependentSourceFilesWithMissingIncludes;
filteredDependentSourceFilesWithMissingIncludes.reserve(dependentSourceFilesWithMissingIncludes.size());
- std::set_difference(dependentSourceFilesWithMissingIncludes.begin(),
- dependentSourceFilesWithMissingIncludes.end(),
- m_containsMissingIncludes.begin(),
- m_containsMissingIncludes.end(),
- std::back_inserter(filteredDependentSourceFilesWithMissingIncludes));
+ std::set_difference(
+ dependentSourceFilesWithMissingIncludes.begin(),
+ dependentSourceFilesWithMissingIncludes.end(),
+ m_containsMissingIncludes.begin(),
+ m_containsMissingIncludes.end(),
+ std::back_inserter(
+ filteredDependentSourceFilesWithMissingIncludes));
dependentSourceFilesWithMissingIncludes = filteredDependentSourceFilesWithMissingIncludes;
}
@@ -255,8 +267,7 @@ public:
sourceDependencies);
}
- void removeSourceWithMissingIncludesFromIncludes()
- {
+ void removeSourceWithMissingIncludesFromSources() {
class Compare
{
public:
@@ -270,17 +281,16 @@ public:
}
};
- auto &includes = m_buildDependency.includes;
- SourceEntries newIncludes;
- newIncludes.reserve(includes.size());
- std::set_difference(includes.begin(),
- includes.end(),
- m_containsMissingIncludes.begin(),
- m_containsMissingIncludes.end(),
- std::back_inserter(newIncludes),
- Compare{});
-
- m_buildDependency.includes = newIncludes;
+ SourceEntryReferences sourcesWithMissingIncludes;
+ sourcesWithMissingIncludes.reserve(m_containsMissingIncludes.size());
+ std::set_intersection(m_buildDependency.sources.begin(),
+ m_buildDependency.sources.end(),
+ m_containsMissingIncludes.begin(),
+ m_containsMissingIncludes.end(),
+ std::back_inserter(sourcesWithMissingIncludes),
+ Compare{});
+ for (SourceEntryReference entry : sourcesWithMissingIncludes)
+ entry.get().hasMissingIncludes = HasMissingIncludes::Yes;
}
SourceDependencies sourceDependenciesSortedByDependendFilePathId() const
@@ -296,12 +306,12 @@ public:
void filterOutIncludesWithMissingIncludes()
{
- sortAndMakeUnique(m_containsMissingIncludes);;
+ sortAndMakeUnique(m_containsMissingIncludes);
collectSourceWithMissingIncludes(m_containsMissingIncludes,
sourceDependenciesSortedByDependendFilePathId());
- removeSourceWithMissingIncludesFromIncludes();
+ removeSourceWithMissingIncludesFromSources();
}
void ensureDirectory(const QString &directory, const QString &fileName)
@@ -339,16 +349,16 @@ public:
return FilePath::fromNativeFilePath(absolutePath(file->getName()));
}
- void addInclude(SourceEntry sourceEntry)
- {
- auto &includes = m_buildDependency.includes;
- auto found = std::lower_bound(includes.begin(),
- includes.end(),
- sourceEntry,
- [](auto first, auto second) { return first < second; });
-
- if (found == includes.end() || *found != sourceEntry)
- includes.emplace(found, sourceEntry);
+ void addSource(SourceEntry sourceEntry) {
+ auto &sources = m_buildDependency.sources;
+ auto found = std::lower_bound(
+ sources.begin(),
+ sources.end(),
+ sourceEntry,
+ [](auto first, auto second) { return first < second; });
+
+ if (found == sources.end() || *found != sourceEntry)
+ sources.emplace(found, sourceEntry);
}
private: