aboutsummaryrefslogtreecommitdiffstats
path: root/src/tools
diff options
context:
space:
mode:
authorMarco Bubke <marco.bubke@qt.io>2019-05-22 12:26:58 +0200
committerMarco Bubke <marco.bubke@qt.io>2019-06-17 10:46:21 +0000
commitb213dee0134722fcdcae88efb514e0430fc72959 (patch)
tree51b62b0de0c934f30fd49a3a0056e44614f11209 /src/tools
parent912cb9278f7528709f9edf08060d997c20d3ec8c (diff)
Clang: Improve updating
If project parts are up to date we send them directly to the indexer, so the indexer can decide we something needs an update. Change-Id: I7d4f32794c6b3a861cdefb3653a6dfd4e711f619 Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
Diffstat (limited to 'src/tools')
-rw-r--r--src/tools/clangpchmanagerbackend/source/pchcreator.cpp2
-rw-r--r--src/tools/clangpchmanagerbackend/source/pchmanagerserver.cpp18
-rw-r--r--src/tools/clangpchmanagerbackend/source/projectpartsmanager.cpp31
-rw-r--r--src/tools/clangpchmanagerbackend/source/projectpartsmanager.h7
-rw-r--r--src/tools/clangpchmanagerbackend/source/projectpartsmanagerinterface.h9
-rw-r--r--src/tools/clangrefactoringbackend/source/indexdataconsumer.cpp7
6 files changed, 49 insertions, 25 deletions
diff --git a/src/tools/clangpchmanagerbackend/source/pchcreator.cpp b/src/tools/clangpchmanagerbackend/source/pchcreator.cpp
index 9dd1bf3647..9416e310aa 100644
--- a/src/tools/clangpchmanagerbackend/source/pchcreator.cpp
+++ b/src/tools/clangpchmanagerbackend/source/pchcreator.cpp
@@ -180,7 +180,7 @@ void PchCreator::doInMainThreadAfterFinished()
m_buildDependenciesStorage.updatePchCreationTimeStamp(m_projectPartPch.lastModified,
m_projectPartPch.projectPartId);
m_clangPathwatcher.updateIdPaths({{m_projectPartPch.projectPartId, existingSources}});
- m_pchManagerClient.precompiledHeadersUpdated({m_projectPartPch});
+ m_pchManagerClient.precompiledHeadersUpdated({m_projectPartPch.projectPartId});
}
}
diff --git a/src/tools/clangpchmanagerbackend/source/pchmanagerserver.cpp b/src/tools/clangpchmanagerbackend/source/pchmanagerserver.cpp
index c1c12121aa..9cce6ef469 100644
--- a/src/tools/clangpchmanagerbackend/source/pchmanagerserver.cpp
+++ b/src/tools/clangpchmanagerbackend/source/pchmanagerserver.cpp
@@ -34,6 +34,7 @@
#include <updategeneratedfilesmessage.h>
#include <updateprojectpartsmessage.h>
+#include <utils/algorithm.h>
#include <utils/smallstring.h>
#include <QApplication>
@@ -57,18 +58,29 @@ void PchManagerServer::end()
QCoreApplication::exit();
}
+namespace {
+ProjectPartIds toProjectPartIds(const ProjectPartContainers &projectParts)
+{
+ return Utils::transform<ProjectPartIds>(projectParts, [](const auto &projectPart) {
+ return projectPart.projectPartId;
+ });
+}
+} // namespace
+
void PchManagerServer::updateProjectParts(UpdateProjectPartsMessage &&message)
{
m_toolChainsArgumentsCache.update(message.projectsParts, message.toolChainArguments);
- ProjectPartContainers newProjectParts = m_projectPartsManager.update(message.takeProjectsParts());
+ auto upToDateProjectParts = m_projectPartsManager.update(message.takeProjectsParts());
if (m_generatedFiles.isValid()) {
- m_pchTaskGenerator.addProjectParts(std::move(newProjectParts),
+ m_pchTaskGenerator.addProjectParts(std::move(upToDateProjectParts.notUpToDate),
std::move(message.toolChainArguments));
} else {
- m_projectPartsManager.updateDeferred(newProjectParts);
+ m_projectPartsManager.updateDeferred(upToDateProjectParts.notUpToDate);
}
+
+ client()->precompiledHeadersUpdated(toProjectPartIds(upToDateProjectParts.upToDate));
}
void PchManagerServer::removeProjectParts(RemoveProjectPartsMessage &&message)
diff --git a/src/tools/clangpchmanagerbackend/source/projectpartsmanager.cpp b/src/tools/clangpchmanagerbackend/source/projectpartsmanager.cpp
index cc4ca53d7d..191a13e16b 100644
--- a/src/tools/clangpchmanagerbackend/source/projectpartsmanager.cpp
+++ b/src/tools/clangpchmanagerbackend/source/projectpartsmanager.cpp
@@ -44,34 +44,35 @@ ProjectPartIds toProjectPartIds(const ProjectPartContainers &projectsParts)
return ids;
}
-ProjectPartContainers ProjectPartsManager::update(ProjectPartContainers &&projectsParts)
+ProjectPartsManager::UpToDataProjectParts ProjectPartsManager::update(ProjectPartContainers &&projectsParts)
{
- auto updatedProjectParts = filterNewProjectParts(std::move(projectsParts), m_projectParts);
+ auto notUpToDateProjectParts = filterProjectParts(projectsParts, m_projectParts);
- if (updatedProjectParts.empty())
- return {};
+ if (notUpToDateProjectParts.empty())
+ return {std::move(projectsParts), {}};
auto persistentProjectParts = m_projectPartsStorage.fetchProjectParts(
- toProjectPartIds(updatedProjectParts));
+ toProjectPartIds(notUpToDateProjectParts));
if (persistentProjectParts.size() > 0) {
mergeProjectParts(persistentProjectParts);
- updatedProjectParts = filterNewProjectParts(std::move(updatedProjectParts),
- persistentProjectParts);
+ notUpToDateProjectParts = filterProjectParts(notUpToDateProjectParts, persistentProjectParts);
- if (updatedProjectParts.empty())
+ if (notUpToDateProjectParts.empty())
return {};
}
- m_projectPartsStorage.updateProjectParts(updatedProjectParts);
- m_projectPartsStorage.resetIndexingTimeStamps(updatedProjectParts);
+ m_projectPartsStorage.updateProjectParts(notUpToDateProjectParts);
+ m_projectPartsStorage.resetIndexingTimeStamps(notUpToDateProjectParts);
m_precompiledHeaderStorage.deleteProjectPrecompiledHeaders(
- toProjectPartIds(updatedProjectParts));
+ toProjectPartIds(notUpToDateProjectParts));
- mergeProjectParts(updatedProjectParts);
+ mergeProjectParts(notUpToDateProjectParts);
- return updatedProjectParts;
+ auto upToDateProjectParts = filterProjectParts(projectsParts, notUpToDateProjectParts);
+
+ return {upToDateProjectParts, notUpToDateProjectParts};
}
void ProjectPartsManager::remove(const ProjectPartIds &projectPartIds)
@@ -176,8 +177,8 @@ ProjectPartContainers ProjectPartsManager::deferredUpdates()
return deferredProjectParts;
}
-ProjectPartContainers ProjectPartsManager::filterNewProjectParts(
- ProjectPartContainers &&projectsParts, const ProjectPartContainers &oldProjectParts)
+ProjectPartContainers ProjectPartsManager::filterProjectParts(
+ const ProjectPartContainers &projectsParts, const ProjectPartContainers &oldProjectParts)
{
ProjectPartContainers updatedProjectPartContainers;
updatedProjectPartContainers.reserve(projectsParts.size());
diff --git a/src/tools/clangpchmanagerbackend/source/projectpartsmanager.h b/src/tools/clangpchmanagerbackend/source/projectpartsmanager.h
index 323e6c6825..35d9e41c1c 100644
--- a/src/tools/clangpchmanagerbackend/source/projectpartsmanager.h
+++ b/src/tools/clangpchmanagerbackend/source/projectpartsmanager.h
@@ -36,6 +36,7 @@
namespace ClangBackEnd {
inline namespace Pch {
+
class ProjectPartsManager final : public ProjectPartsManagerInterface
{
public:
@@ -45,14 +46,14 @@ public:
, m_precompiledHeaderStorage(precompiledHeaderStorage)
{}
- ProjectPartContainers update(ProjectPartContainers &&projectsParts) override;
+ UpToDataProjectParts update(ProjectPartContainers &&projectsParts) override;
void remove(const ProjectPartIds &projectPartIds) override;
ProjectPartContainers projects(const ProjectPartIds &projectPartIds) const override;
void updateDeferred(const ProjectPartContainers &projectsParts) override;
ProjectPartContainers deferredUpdates() override;
- static ProjectPartContainers filterNewProjectParts(ProjectPartContainers &&newProjectsParts,
- const ProjectPartContainers &oldProjectParts);
+ static ProjectPartContainers filterProjectParts(const ProjectPartContainers &newProjectsParts,
+ const ProjectPartContainers &oldProjectParts);
void mergeProjectParts(const ProjectPartContainers &projectsParts);
const ProjectPartContainers &projectParts() const;
diff --git a/src/tools/clangpchmanagerbackend/source/projectpartsmanagerinterface.h b/src/tools/clangpchmanagerbackend/source/projectpartsmanagerinterface.h
index ee80173f8a..54bae58c1a 100644
--- a/src/tools/clangpchmanagerbackend/source/projectpartsmanagerinterface.h
+++ b/src/tools/clangpchmanagerbackend/source/projectpartsmanagerinterface.h
@@ -32,11 +32,18 @@ namespace ClangBackEnd {
class ProjectPartsManagerInterface
{
public:
+ class UpToDataProjectParts
+ {
+ public:
+ ProjectPartContainers upToDate;
+ ProjectPartContainers notUpToDate;
+ };
+
ProjectPartsManagerInterface() = default;
ProjectPartsManagerInterface(const ProjectPartsManagerInterface &) = delete;
ProjectPartsManagerInterface &operator=(const ProjectPartsManagerInterface &) = delete;
- virtual ProjectPartContainers update(ProjectPartContainers &&projectsParts) = 0;
+ virtual UpToDataProjectParts update(ProjectPartContainers &&projectsParts) = 0;
virtual void remove(const ProjectPartIds &projectPartIds) = 0;
virtual ProjectPartContainers projects(const ProjectPartIds &projectPartIds) const = 0;
virtual void updateDeferred(const ProjectPartContainers &projectsParts) = 0;
diff --git a/src/tools/clangrefactoringbackend/source/indexdataconsumer.cpp b/src/tools/clangrefactoringbackend/source/indexdataconsumer.cpp
index 86e5fb597c..f44b3134a2 100644
--- a/src/tools/clangrefactoringbackend/source/indexdataconsumer.cpp
+++ b/src/tools/clangrefactoringbackend/source/indexdataconsumer.cpp
@@ -32,6 +32,8 @@
#include <llvm/ADT/ArrayRef.h>
+#include <iostream>
+
namespace ClangBackEnd {
namespace {
@@ -136,9 +138,10 @@ bool IndexDataConsumer::handleDeclOccurence(
if (!namedDeclaration->getIdentifier())
return true;
- if (skipSymbol(m_sourceManager->getFileID(sourceLocation), symbolRoles))
-
+ if (skipSymbol(m_sourceManager->getFileID(sourceLocation), symbolRoles)) {
+ namedDeclaration->getDeclName().dump();
return true;
+ }
SymbolIndex globalId = toSymbolIndex(declaration->getCanonicalDecl());