summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarco Bubke <marco.bubke@qt.io>2019-01-22 14:38:02 +0100
committerMarco Bubke <marco.bubke@qt.io>2019-01-24 12:47:30 +0000
commit693c896e5aa10c12e739f94cbf45d35f091e2477 (patch)
tree0ae8a5058bf482d9fafa7d0f229bfb9abeec0339 /src
parentb5f7e303ee55ae5cf3d851296c0a1dd72462c6fb (diff)
downloadqt-creator-693c896e5aa10c12e739f94cbf45d35f091e2477.tar.gz
PchManager: Use Generated Files in BuildDependencyCollector
Task-number: QTCREATORBUG-21843 Change-Id: I33c29d50943a914313a4c2e577b0210460f663d8 Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/tools/clangpchmanagerbackend/clangpchmanagerbackendmain.cpp2
-rw-r--r--src/tools/clangpchmanagerbackend/source/builddependencycollector.cpp2
-rw-r--r--src/tools/clangpchmanagerbackend/source/builddependencycollector.h8
-rw-r--r--src/tools/clangrefactoringbackend/source/sourcelocationsutils.h10
4 files changed, 18 insertions, 4 deletions
diff --git a/src/tools/clangpchmanagerbackend/clangpchmanagerbackendmain.cpp b/src/tools/clangpchmanagerbackend/clangpchmanagerbackendmain.cpp
index 4e2b19db8b..d62fa6e41d 100644
--- a/src/tools/clangpchmanagerbackend/clangpchmanagerbackendmain.cpp
+++ b/src/tools/clangpchmanagerbackend/clangpchmanagerbackendmain.cpp
@@ -192,7 +192,7 @@ struct Data // because we have a cycle dependency
database};
ClangBackEnd::PchTasksMerger pchTaskMerger{pchTaskQueue};
ClangBackEnd::BuildDependenciesStorage<> buildDependencyStorage{database};
- ClangBackEnd::BuildDependencyCollector buildDependencyCollector{filePathCache};
+ ClangBackEnd::BuildDependencyCollector buildDependencyCollector{filePathCache, generatedFiles};
std::function<TimeStamp(FilePathView filePath)> getModifiedTime{
[&](ClangBackEnd::FilePathView path) -> TimeStamp {
return QFileInfo(QString(path)).lastModified().toSecsSinceEpoch();
diff --git a/src/tools/clangpchmanagerbackend/source/builddependencycollector.cpp b/src/tools/clangpchmanagerbackend/source/builddependencycollector.cpp
index 833691fa89..6647d02531 100644
--- a/src/tools/clangpchmanagerbackend/source/builddependencycollector.cpp
+++ b/src/tools/clangpchmanagerbackend/source/builddependencycollector.cpp
@@ -55,6 +55,8 @@ BuildDependency BuildDependencyCollector::create(const ProjectPartContainer &pro
setExcludedFilePaths(
m_filePathCache.filePaths(projectPart.headerPathIds + projectPart.sourcePathIds));
+ addUnsavedFiles(m_generatedFiles.fileContainers());
+
collect();
auto buildDependency = std::move(m_buildDependency);
diff --git a/src/tools/clangpchmanagerbackend/source/builddependencycollector.h b/src/tools/clangpchmanagerbackend/source/builddependencycollector.h
index 2ea7fb7c90..b9446c9692 100644
--- a/src/tools/clangpchmanagerbackend/source/builddependencycollector.h
+++ b/src/tools/clangpchmanagerbackend/source/builddependencycollector.h
@@ -28,6 +28,7 @@
#include "builddependencygeneratorinterface.h"
#include <clangtool.h>
+#include <generatedfilesinterface.h>
#include <sourcesmanager.h>
#include <filepathcachingfwd.h>
@@ -37,8 +38,10 @@ namespace ClangBackEnd {
class BuildDependencyCollector : public BuildDependencyGeneratorInterface
{
public:
- BuildDependencyCollector(const FilePathCachingInterface &filePathCache)
- : m_filePathCache(filePathCache)
+ BuildDependencyCollector(const FilePathCachingInterface &filePathCache,
+ const GeneratedFilesInterface &generatedFiles)
+ : m_filePathCache(filePathCache)
+ , m_generatedFiles(generatedFiles)
{
}
@@ -92,6 +95,7 @@ private:
Utils::SmallStringVector m_directories;
SourcesManager m_sourcesManager;
const FilePathCachingInterface &m_filePathCache;
+ const GeneratedFilesInterface &m_generatedFiles;
};
} // namespace ClangBackEnd
diff --git a/src/tools/clangrefactoringbackend/source/sourcelocationsutils.h b/src/tools/clangrefactoringbackend/source/sourcelocationsutils.h
index c179c9599e..45bc71fdb4 100644
--- a/src/tools/clangrefactoringbackend/source/sourcelocationsutils.h
+++ b/src/tools/clangrefactoringbackend/source/sourcelocationsutils.h
@@ -44,9 +44,17 @@ llvm::SmallString<256> absolutePath(clang::StringRef path)
{
llvm::SmallString<256> absolutePath;
+ if (llvm::sys::path::is_absolute(path)) {
+ absolutePath = path;
+
+ llvm::sys::path::remove_dots(absolutePath, true);
+
+ return absolutePath;
+ }
+
std::error_code errorCode = llvm::sys::fs::real_path(path, absolutePath, true);
- if (!errorCode && !llvm::sys::path::is_absolute(absolutePath))
+ if (!errorCode)
llvm::sys::fs::make_absolute(absolutePath);
return absolutePath;