summaryrefslogtreecommitdiff
path: root/src/tools
diff options
context:
space:
mode:
authorMarco Bubke <marco.bubke@qt.io>2018-09-11 14:02:59 +0200
committerMarco Bubke <marco.bubke@qt.io>2018-09-12 15:08:46 +0000
commitb173c3d83f27b6d21607381ecada2d1ba7aff2df (patch)
tree6e72e05083ba87827d558810505841ad92d3fa66 /src/tools
parente0b7a283332095fea03a5bed310b632e72f7d486 (diff)
downloadqt-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')
-rw-r--r--src/tools/clangpchmanagerbackend/clangpchmanagerbackendmain.cpp12
-rw-r--r--src/tools/clangpchmanagerbackend/source/pchcreator.cpp43
-rw-r--r--src/tools/clangpchmanagerbackend/source/pchcreator.h13
-rw-r--r--src/tools/clangpchmanagerbackend/source/pchcreatorinterface.h1
-rw-r--r--src/tools/clangpchmanagerbackend/source/pchmanagerserver.cpp11
-rw-r--r--src/tools/clangpchmanagerbackend/source/pchmanagerserver.h6
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