From 97976fd3cbdd57ed83cdc3e606196f2bb7ee1a78 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Wed, 25 Jan 2023 14:15:15 +0100 Subject: [PATCH] ProjectExplorer: Refactor BuildSystem::extraCompilerForSource Factor out backend into more generic function to easily support new accessors. No functional changes. Change-Id: I715ce2842d2c63574bdf6ada0d0e32fbfd5d08fb Reviewed-by: Reviewed-by: Christian Stenger --- src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp | 6 ++---- src/plugins/cmakeprojectmanager/cmakebuildsystem.h | 3 ++- src/plugins/projectexplorer/buildsystem.cpp | 12 +++++++++--- src/plugins/projectexplorer/buildsystem.h | 5 ++++- src/plugins/qbsprojectmanager/qbsproject.cpp | 6 ++---- src/plugins/qbsprojectmanager/qbsproject.h | 3 ++- src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp | 7 ++++--- src/plugins/qmakeprojectmanager/qmakeparsernodes.h | 3 ++- src/plugins/qmakeprojectmanager/qmakeproject.cpp | 4 ++-- src/plugins/qmakeprojectmanager/qmakeproject.h | 3 ++- 10 files changed, 31 insertions(+), 21 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp b/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp index daef1d30daf..9b834bc6263 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp @@ -1401,11 +1401,9 @@ void CMakeBuildSystem::runGenerator(Id id) proc->start(); } -ExtraCompiler *CMakeBuildSystem::extraCompilerForSource(const Utils::FilePath &source) +ExtraCompiler *CMakeBuildSystem::findExtraCompiler(const ExtraCompilerFilter &filter) const { - return Utils::findOrDefault(m_extraCompilers, [source](ExtraCompiler *ec) { - return ec->source() == source; - }); + return Utils::findOrDefault(m_extraCompilers, filter); } } // CMakeProjectManager::Internal diff --git a/src/plugins/cmakeprojectmanager/cmakebuildsystem.h b/src/plugins/cmakeprojectmanager/cmakebuildsystem.h index ec257ea09c4..802921f04b8 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildsystem.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildsystem.h @@ -122,7 +122,8 @@ signals: private: QList> generators() const override; void runGenerator(Utils::Id id) override; - ProjectExplorer::ExtraCompiler *extraCompilerForSource(const Utils::FilePath &source) override; + ProjectExplorer::ExtraCompiler *findExtraCompiler( + const ExtraCompilerFilter &filter) const override; enum ForceEnabledChanged { False, True }; void clearError(ForceEnabledChanged fec = ForceEnabledChanged::False); diff --git a/src/plugins/projectexplorer/buildsystem.cpp b/src/plugins/projectexplorer/buildsystem.cpp index 000949f3e51..b103d974683 100644 --- a/src/plugins/projectexplorer/buildsystem.cpp +++ b/src/plugins/projectexplorer/buildsystem.cpp @@ -4,6 +4,7 @@ #include "buildsystem.h" #include "buildconfiguration.h" +#include "extracompiler.h" #include "projectexplorer.h" #include "projectexplorertr.h" #include "runconfiguration.h" @@ -190,6 +191,12 @@ void BuildSystem::requestParseHelper(int delay) d->m_delayedParsingTimer.start(); } +ExtraCompiler *BuildSystem::findExtraCompiler( + const std::function &) const +{ + return nullptr; +} + bool BuildSystem::addFiles(Node *, const FilePaths &filePaths, FilePaths *notAdded) { Q_UNUSED(filePaths) @@ -236,10 +243,9 @@ bool BuildSystem::supportsAction(Node *, ProjectAction, const Node *) const return false; } -ExtraCompiler *BuildSystem::extraCompilerForSource(const Utils::FilePath &source) +ExtraCompiler *BuildSystem::extraCompilerForSource(const Utils::FilePath &source) const { - Q_UNUSED(source); - return nullptr; + return findExtraCompiler([source](const ExtraCompiler *ec) { return ec->source() == source; }); } MakeInstallCommand BuildSystem::makeInstallCommand(const FilePath &installRoot) const diff --git a/src/plugins/projectexplorer/buildsystem.h b/src/plugins/projectexplorer/buildsystem.h index f43eb37f7d6..1fcbdbff18f 100644 --- a/src/plugins/projectexplorer/buildsystem.h +++ b/src/plugins/projectexplorer/buildsystem.h @@ -84,7 +84,7 @@ public: virtual QString name() const = 0; // Owned by the build system. Use only in main thread. Can go away at any time. - virtual ExtraCompiler *extraCompilerForSource(const Utils::FilePath &source); + ExtraCompiler *extraCompilerForSource(const Utils::FilePath &source) const; virtual MakeInstallCommand makeInstallCommand(const Utils::FilePath &installRoot) const; @@ -161,9 +161,12 @@ protected: // Call in GUI thread right after the actual parsing is done void emitParsingFinished(bool success); + using ExtraCompilerFilter = std::function; private: void requestParseHelper(int delay); // request a (delayed!) parser run. + virtual ExtraCompiler *findExtraCompiler(const ExtraCompilerFilter &filter) const; + class BuildSystemPrivate *d = nullptr; }; diff --git a/src/plugins/qbsprojectmanager/qbsproject.cpp b/src/plugins/qbsprojectmanager/qbsproject.cpp index 286219a9b7d..dc72660e7a3 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.cpp +++ b/src/plugins/qbsprojectmanager/qbsproject.cpp @@ -586,11 +586,9 @@ void QbsBuildSystem::delayParsing() requestDelayedParse(); } -ExtraCompiler *QbsBuildSystem::extraCompilerForSource(const Utils::FilePath &source) +ExtraCompiler *QbsBuildSystem::findExtraCompiler(const ExtraCompilerFilter &filter) const { - return Utils::findOrDefault(m_extraCompilers, [source](ExtraCompiler *ec) { - return ec->source() == source; - }); + return Utils::findOrDefault(m_extraCompilers, filter); } void QbsBuildSystem::parseCurrentBuildConfiguration() diff --git a/src/plugins/qbsprojectmanager/qbsproject.h b/src/plugins/qbsprojectmanager/qbsproject.h index 4a21caa2a92..ab4728ae749 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.h +++ b/src/plugins/qbsprojectmanager/qbsproject.h @@ -105,7 +105,8 @@ public: private: friend class QbsProject; - ProjectExplorer::ExtraCompiler *extraCompilerForSource(const Utils::FilePath &source) override; + ProjectExplorer::ExtraCompiler *findExtraCompiler( + const ExtraCompilerFilter &filter) const override; void handleQbsParsingDone(bool success); void changeActiveTarget(ProjectExplorer::Target *t); diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp index d7d0a854c44..14fecd00d93 100644 --- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp @@ -2080,15 +2080,16 @@ QList QmakeProFile::extraCompilers() const return m_extraCompilers; } -ExtraCompiler *QmakeProFile::extraCompilerForSource(const Utils::FilePath &sourceFile) +ExtraCompiler *QmakeProFile::findExtraCompiler( + const std::function &filter) { for (ExtraCompiler * const ec : std::as_const(m_extraCompilers)) { - if (ec->source() == sourceFile) + if (filter(ec)) return ec; } for (QmakePriFile * const priFile : std::as_const(m_children)) { if (const auto proFile = dynamic_cast(priFile)) { - if (ExtraCompiler * const ec = proFile->extraCompilerForSource(sourceFile)) + if (ExtraCompiler * const ec = proFile->findExtraCompiler(filter)) return ec; } } diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.h b/src/plugins/qmakeprojectmanager/qmakeparsernodes.h index f9700b7f549..34c4958564b 100644 --- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.h +++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.h @@ -301,7 +301,8 @@ public: const Utils::FilePath &sourceFile, const ProjectExplorer::FileType &sourceFileType) const; QList extraCompilers() const; - ProjectExplorer::ExtraCompiler *extraCompilerForSource(const Utils::FilePath &sourceFile); + ProjectExplorer::ExtraCompiler *findExtraCompiler( + const std::function &filter); TargetInformation targetInformation() const; InstallsList installsList() const; diff --git a/src/plugins/qmakeprojectmanager/qmakeproject.cpp b/src/plugins/qmakeprojectmanager/qmakeproject.cpp index 84188df03f9..6d840187251 100644 --- a/src/plugins/qmakeprojectmanager/qmakeproject.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeproject.cpp @@ -532,9 +532,9 @@ void QmakeBuildSystem::scheduleUpdateAllNowOrLater() scheduleUpdateAll(QmakeProFile::ParseLater); } -ExtraCompiler *QmakeBuildSystem::extraCompilerForSource(const Utils::FilePath &source) +ExtraCompiler *QmakeBuildSystem::findExtraCompiler(const ExtraCompilerFilter &filter) const { - return m_rootProFile->extraCompilerForSource(source); + return m_rootProFile->findExtraCompiler(filter); } QmakeBuildConfiguration *QmakeBuildSystem::qmakeBuildConfiguration() const diff --git a/src/plugins/qmakeprojectmanager/qmakeproject.h b/src/plugins/qmakeprojectmanager/qmakeproject.h index edf2db0edfa..6615baaaca5 100644 --- a/src/plugins/qmakeprojectmanager/qmakeproject.h +++ b/src/plugins/qmakeprojectmanager/qmakeproject.h @@ -163,7 +163,8 @@ public: void scheduleUpdateAllNowOrLater(); private: - ProjectExplorer::ExtraCompiler *extraCompilerForSource(const Utils::FilePath &source) override; + ProjectExplorer::ExtraCompiler *findExtraCompiler( + const ExtraCompilerFilter &filter) const override; void scheduleUpdateAll(QmakeProFile::AsyncUpdateDelay delay); void scheduleUpdateAllLater() { scheduleUpdateAll(QmakeProFile::ParseLater); }