diff options
author | Marco Bubke <marco.bubke@qt.io> | 2018-09-11 14:02:59 +0200 |
---|---|---|
committer | Marco Bubke <marco.bubke@qt.io> | 2018-09-12 15:08:46 +0000 |
commit | b173c3d83f27b6d21607381ecada2d1ba7aff2df (patch) | |
tree | 6e72e05083ba87827d558810505841ad92d3fa66 /src/tools | |
parent | e0b7a283332095fea03a5bed310b632e72f7d486 (diff) | |
download | qt-creator-b173c3d83f27b6d21607381ecada2d1ba7aff2df.tar.gz |
Clang: Add generated files support for pch manager
Change-Id: I69aae62dd1091a1958d4b0f23a37758c9f58c97b
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
Diffstat (limited to 'src/tools')
6 files changed, 47 insertions, 39 deletions
diff --git a/src/tools/clangpchmanagerbackend/clangpchmanagerbackendmain.cpp b/src/tools/clangpchmanagerbackend/clangpchmanagerbackendmain.cpp index 81345dc184..d751ab0bd4 100644 --- a/src/tools/clangpchmanagerbackend/clangpchmanagerbackendmain.cpp +++ b/src/tools/clangpchmanagerbackend/clangpchmanagerbackendmain.cpp @@ -26,6 +26,7 @@ #include <clangpathwatcher.h> #include <connectionserver.h> #include <environment.h> +#include <generatedfiles.h> #include <pchcreator.h> #include <pchgenerator.h> #include <pchmanagerserver.h> @@ -50,6 +51,7 @@ using namespace std::chrono_literals; using ClangBackEnd::ClangPathWatcher; using ClangBackEnd::ConnectionServer; +using ClangBackEnd::GeneratedFiles; using ClangBackEnd::PchCreator; using ClangBackEnd::PchGenerator; using ClangBackEnd::PchManagerClientProxy; @@ -57,7 +59,7 @@ using ClangBackEnd::PchManagerServer; using ClangBackEnd::ProjectParts; using ClangBackEnd::FilePathCache; -class PchManagerApplication : public QCoreApplication +class PchManagerApplication final : public QCoreApplication { public: using QCoreApplication::QCoreApplication; @@ -74,7 +76,7 @@ public: } }; -class ApplicationEnvironment : public ClangBackEnd::Environment +class ApplicationEnvironment final : public ClangBackEnd::Environment { public: ApplicationEnvironment(const QString &pchsPath) @@ -142,12 +144,14 @@ int main(int argc, char *argv[]) ClangPathWatcher<QFileSystemWatcher, QTimer> includeWatcher(filePathCache); ApplicationEnvironment environment{pchsPath}; PchGenerator<QProcess> pchGenerator(environment); - PchCreator pchCreator(environment, filePathCache); + GeneratedFiles generatedFiles; + PchCreator pchCreator(environment, filePathCache, generatedFiles); pchCreator.setGenerator(&pchGenerator); ProjectParts projectParts; PchManagerServer clangPchManagerServer(includeWatcher, pchCreator, - projectParts); + projectParts, + generatedFiles); includeWatcher.setNotifier(&clangPchManagerServer); pchGenerator.setNotifier(&clangPchManagerServer); diff --git a/src/tools/clangpchmanagerbackend/source/pchcreator.cpp b/src/tools/clangpchmanagerbackend/source/pchcreator.cpp index d1635dc944..fb7ccaae53 100644 --- a/src/tools/clangpchmanagerbackend/source/pchcreator.cpp +++ b/src/tools/clangpchmanagerbackend/source/pchcreator.cpp @@ -30,6 +30,7 @@ #include "pchnotcreatederror.h" #include <filepathcachinginterface.h> +#include <generatedfiles.h> #include <projectpartpch.h> #include <QCryptographicHash> @@ -39,8 +40,11 @@ namespace ClangBackEnd { -PchCreator::PchCreator(Environment &environment, FilePathCachingInterface &filePathCache) - : m_environment(environment), +PchCreator::PchCreator(Environment &environment, + FilePathCachingInterface &filePathCache, + const GeneratedFiles &generatedFiles) + : m_generatedFiles(generatedFiles), + m_environment(environment), m_filePathCache(filePathCache) { } @@ -49,20 +53,15 @@ PchCreator::PchCreator(V2::ProjectPartContainers &&projectsParts, Environment &environment, FilePathCachingInterface &filePathCache, PchGeneratorInterface *pchGenerator, - V2::FileContainers &&generatedFiles) + const GeneratedFiles &generatedFiles) : m_projectParts(std::move(projectsParts)), - m_generatedFiles(std::move(generatedFiles)), + m_generatedFiles(generatedFiles), m_environment(environment), m_filePathCache(filePathCache), m_pchGenerator(pchGenerator) { } -void PchCreator::setGeneratedFiles(V2::FileContainers &&generatedFiles) -{ - m_generatedFiles = generatedFiles; -} - namespace { template <typename Source, typename Target> @@ -161,9 +160,9 @@ Utils::PathStringVector PchCreator::generateGlobalHeaderPaths() const Utils::PathStringVector headerPaths = generateGlobal<Utils::PathStringVector>(m_projectParts, includeFunction, - m_generatedFiles.size()); + m_generatedFiles.fileContainers().size()); - Utils::PathStringVector generatedPath = generatedFilePaths(m_generatedFiles); + Utils::PathStringVector generatedPath = generatedFilePaths(m_generatedFiles.fileContainers()); headerPaths.insert(headerPaths.end(), std::make_move_iterator(generatedPath.begin()), @@ -250,11 +249,11 @@ FilePathIds PchCreator::generateGlobalPchIncludeIds() const { IncludeCollector collector(m_filePathCache); - collector.setExcludedIncludes(generateGlobalHeaderAndSourcePaths()); + collector.setExcludedIncludes(generateGlobalSourcePaths()); collector.addFiles(generateGlobalHeaderAndSourcePaths(), generateGlobalCommandLine()); - collector.addUnsavedFiles(m_generatedFiles); + collector.addUnsavedFiles(m_generatedFiles.fileContainers()); collector.collectIncludes(); @@ -281,7 +280,7 @@ Utils::SmallString PchCreator::generatePchIncludeFileContent(const FilePathIds & fileContent.reserve(includes.size() * lineTemplateSize + contentSize(includes)); - for (const Utils::SmallStringView &include : includes) + for (Utils::SmallStringView include : includes) fileContent += {"#include \"", include, "\"\n"}; return fileContent; @@ -400,7 +399,7 @@ Utils::PathStringVector PchCreator::generateProjectPartHeaders( const V2::ProjectPartContainer &projectPart) const { Utils::PathStringVector headerPaths; - headerPaths.reserve(projectPart.headerPathIds.size() + m_generatedFiles.size()); + headerPaths.reserve(projectPart.headerPathIds.size() + m_generatedFiles.fileContainers().size()); std::transform(projectPart.headerPathIds.begin(), projectPart.headerPathIds.end(), @@ -409,7 +408,7 @@ Utils::PathStringVector PchCreator::generateProjectPartHeaders( return m_filePathCache.filePath(filePathId); }); - Utils::PathStringVector generatedPath = generatedFilePaths(m_generatedFiles); + Utils::PathStringVector generatedPath = generatedFilePaths(m_generatedFiles.fileContainers()); std::copy(std::make_move_iterator(generatedPath.begin()), std::make_move_iterator(generatedPath.end()), @@ -447,15 +446,15 @@ Utils::SmallString concatContent(const Utils::PathStringVector &paths, std::size } -Utils::SmallString PchCreator::generateProjectPartHeaderAndSourcesContent( +Utils::SmallString PchCreator::generateProjectPartSourcesContent( const V2::ProjectPartContainer &projectPart) const { - Utils::PathStringVector paths = generateProjectPartHeaderAndSourcePaths(projectPart); + Utils::PathStringVector paths = generateProjectPartSourcePaths(projectPart); return concatContent(paths, sizeOfContent(paths)); } -Utils::PathStringVector PchCreator::generateProjectPartHeaderAndSourcePaths( +Utils::PathStringVector PchCreator::generateProjectPartSourcePaths( const V2::ProjectPartContainer &projectPart) const { Utils::PathStringVector includeAndSources; @@ -469,7 +468,7 @@ Utils::PathStringVector PchCreator::generateProjectPartHeaderAndSourcePaths( std::pair<FilePathIds,FilePathIds> PchCreator::generateProjectPartPchIncludes( const V2::ProjectPartContainer &projectPart) const { - Utils::SmallString jointedFileContent = generateProjectPartHeaderAndSourcesContent(projectPart); + Utils::SmallString jointedFileContent = generateProjectPartSourcesContent(projectPart); Utils::SmallString jointedFilePath = generateProjectPartSourceFilePath(projectPart); auto jointFile = generateFileWithContent(jointedFilePath, jointedFileContent); Utils::SmallStringVector arguments = generateProjectPartCommandLine(projectPart); @@ -478,14 +477,14 @@ std::pair<FilePathIds,FilePathIds> PchCreator::generateProjectPartPchIncludes( IncludeCollector collector(m_filePathCache); - collector.setExcludedIncludes(generateProjectPartHeaderAndSourcePaths(projectPart)); + collector.setExcludedIncludes(generateProjectPartSourcePaths(projectPart)); collector.addFile(std::string(filePath.directory()), std::string(filePath.name()), {}, arguments); - collector.addUnsavedFiles(m_generatedFiles); + collector.addUnsavedFiles(m_generatedFiles.fileContainers()); collector.collectIncludes(); diff --git a/src/tools/clangpchmanagerbackend/source/pchcreator.h b/src/tools/clangpchmanagerbackend/source/pchcreator.h index 62f3cfa5e9..65425296b6 100644 --- a/src/tools/clangpchmanagerbackend/source/pchcreator.h +++ b/src/tools/clangpchmanagerbackend/source/pchcreator.h @@ -43,20 +43,21 @@ QT_FORWARD_DECLARE_CLASS(QProcess) namespace ClangBackEnd { class Environment; +class GeneratedFiles; class PchCreator final : public PchCreatorInterface { public: PchCreator(Environment &environment, - FilePathCachingInterface &filePathCache); + FilePathCachingInterface &filePathCache, + const GeneratedFiles &generatedFiles); PchCreator(V2::ProjectPartContainers &&projectsParts, Environment &environment, FilePathCachingInterface &filePathCache, PchGeneratorInterface *pchGenerator, - V2::FileContainers &&generatedFiles); + const GeneratedFiles &generatedFiles); void generatePchs(V2::ProjectPartContainers &&projectsParts) override; - void setGeneratedFiles(V2::FileContainers &&generatedFiles) override; std::vector<IdPaths> takeProjectsIncludes() override; void setGenerator(PchGeneratorInterface *pchGenerator); @@ -93,9 +94,9 @@ unittest_public: const V2::ProjectPartContainer &projectPart) const; Utils::PathStringVector generateProjectPartHeaders( const V2::ProjectPartContainer &projectPart) const; - Utils::SmallString generateProjectPartHeaderAndSourcesContent( + Utils::SmallString generateProjectPartSourcesContent( const V2::ProjectPartContainer &projectPart) const; - Utils::PathStringVector generateProjectPartHeaderAndSourcePaths( + Utils::PathStringVector generateProjectPartSourcePaths( const V2::ProjectPartContainer &projectPart) const; std::pair<FilePathIds,FilePathIds> generateProjectPartPchIncludes( const V2::ProjectPartContainer &projectPart) const; @@ -123,9 +124,9 @@ private: private: V2::ProjectPartContainers m_projectParts; - V2::FileContainers m_generatedFiles; std::vector<ProjectPartPch> m_projectPartPchs; std::vector<IdPaths> m_projectsIncludeIds; + const GeneratedFiles &m_generatedFiles; Environment &m_environment; FilePathCachingInterface &m_filePathCache; PchGeneratorInterface *m_pchGenerator = nullptr; diff --git a/src/tools/clangpchmanagerbackend/source/pchcreatorinterface.h b/src/tools/clangpchmanagerbackend/source/pchcreatorinterface.h index bc16f0e00a..dd33176519 100644 --- a/src/tools/clangpchmanagerbackend/source/pchcreatorinterface.h +++ b/src/tools/clangpchmanagerbackend/source/pchcreatorinterface.h @@ -41,7 +41,6 @@ public: PchCreatorInterface &operator=(const PchCreatorInterface &) = delete; virtual void generatePchs(V2::ProjectPartContainers &&projectsParts) = 0; - virtual void setGeneratedFiles(V2::FileContainers &&generatedFiles) = 0; virtual std::vector<IdPaths> takeProjectsIncludes() = 0; protected: diff --git a/src/tools/clangpchmanagerbackend/source/pchmanagerserver.cpp b/src/tools/clangpchmanagerbackend/source/pchmanagerserver.cpp index 1e9ea5ea46..e165365d30 100644 --- a/src/tools/clangpchmanagerbackend/source/pchmanagerserver.cpp +++ b/src/tools/clangpchmanagerbackend/source/pchmanagerserver.cpp @@ -27,6 +27,7 @@ #include <pchmanagerclientinterface.h> #include <precompiledheadersupdatedmessage.h> +#include <removegeneratedfilesmessage.h> #include <removeprojectpartsmessage.h> #include <updategeneratedfilesmessage.h> #include <updateprojectpartsmessage.h> @@ -39,10 +40,12 @@ namespace ClangBackEnd { PchManagerServer::PchManagerServer(ClangPathWatcherInterface &fileSystemWatcher, PchCreatorInterface &pchCreator, - ProjectPartsInterface &projectParts) + ProjectPartsInterface &projectParts, + GeneratedFilesInterface &generatedFiles) : m_fileSystemWatcher(fileSystemWatcher), m_pchCreator(pchCreator), - m_projectParts(projectParts) + m_projectParts(projectParts), + m_generatedFiles(generatedFiles) { m_fileSystemWatcher.setNotifier(this); } @@ -69,12 +72,12 @@ void PchManagerServer::removeProjectParts(RemoveProjectPartsMessage &&message) void PchManagerServer::updateGeneratedFiles(UpdateGeneratedFilesMessage &&message) { - m_pchCreator.setGeneratedFiles(message.takeGeneratedFiles()); + m_generatedFiles.update(message.takeGeneratedFiles()); } void PchManagerServer::removeGeneratedFiles(RemoveGeneratedFilesMessage &&message) { - // TODO + m_generatedFiles.remove(message.takeGeneratedFiles()); } void PchManagerServer::pathsWithIdsChanged(const Utils::SmallStringVector &ids) diff --git a/src/tools/clangpchmanagerbackend/source/pchmanagerserver.h b/src/tools/clangpchmanagerbackend/source/pchmanagerserver.h index b188b0e6bb..717ba03359 100644 --- a/src/tools/clangpchmanagerbackend/source/pchmanagerserver.h +++ b/src/tools/clangpchmanagerbackend/source/pchmanagerserver.h @@ -32,6 +32,7 @@ #include "pchmanagerserverinterface.h" #include "projectpartsinterface.h" +#include <generatedfilesinterface.h> #include <ipcclientprovider.h> namespace ClangBackEnd { @@ -47,8 +48,8 @@ class PchManagerServer : public PchManagerServerInterface, public: PchManagerServer(ClangPathWatcherInterface &fileSystemWatcher, PchCreatorInterface &pchCreator, - ProjectPartsInterface &projectParts); - + ProjectPartsInterface &projectParts, + GeneratedFilesInterface &generatedFiles); void end() override; void updateProjectParts(UpdateProjectPartsMessage &&message) override; @@ -64,6 +65,7 @@ private: ClangPathWatcherInterface &m_fileSystemWatcher; PchCreatorInterface &m_pchCreator; ProjectPartsInterface &m_projectParts; + GeneratedFilesInterface &m_generatedFiles; }; } // namespace ClangBackEnd |