From f73e787bd19e4bb4368499f2b107d7c69208c50f Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Mon, 9 Jan 2023 17:35:07 +0100 Subject: [PATCH] ExecutableInfo: Share getClangIncludeDirAndVersion's cache Share the common cache with ClangToolRunControl and DocumentClangToolRunner. Change-Id: I47c6a1844459e80e9ea0336b5aa72db0265d3a30 Reviewed-by: David Schulz --- .../clangtools/documentclangtoolrunner.cpp | 15 +++------------ src/plugins/clangtools/executableinfo.cpp | 11 ++++++++++- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/plugins/clangtools/documentclangtoolrunner.cpp b/src/plugins/clangtools/documentclangtoolrunner.cpp index a73df0e89b7..7cae31be1c2 100644 --- a/src/plugins/clangtools/documentclangtoolrunner.cpp +++ b/src/plugins/clangtools/documentclangtoolrunner.cpp @@ -218,30 +218,21 @@ void DocumentClangToolRunner::run() runNext(); } -QPair getClangIncludeDirAndVersion(ClangToolRunner *runner) -{ - static QMap> cache; - const FilePath tool = runner->executable(); - auto it = cache.find(tool); - if (it == cache.end()) - it = cache.insert(tool, getClangIncludeDirAndVersion(tool)); - return it.value(); -} - void DocumentClangToolRunner::runNext() { if (m_currentRunner) m_currentRunner.release()->deleteLater(); m_currentRunner.reset(m_runnerCreators.isEmpty() ? nullptr : m_runnerCreators.takeFirst()()); if (m_currentRunner) { - auto [clangIncludeDir, clangVersion] = getClangIncludeDirAndVersion(m_currentRunner.get()); + const auto [clangIncludeDir, clangVersion] = getClangIncludeDirAndVersion( + m_currentRunner->executable()); qCDebug(LOG) << Q_FUNC_INFO << m_currentRunner->executable() << clangIncludeDir << clangVersion << m_fileInfo.file; if (m_currentRunner->executable().isEmpty() || clangIncludeDir.isEmpty() || clangVersion.isEmpty() || (m_document->isModified() && !m_currentRunner->supportsVFSOverlay())) { runNext(); } else { - AnalyzeUnit unit(m_fileInfo, clangIncludeDir, clangVersion); + const AnalyzeUnit unit(m_fileInfo, clangIncludeDir, clangVersion); QTC_ASSERT(FilePath::fromString(unit.file).exists(), runNext(); return;); m_currentRunner->setVFSOverlay(vfso().overlayFilePath().toString()); if (!m_currentRunner->run(unit.file, unit.arguments)) diff --git a/src/plugins/clangtools/executableinfo.cpp b/src/plugins/clangtools/executableinfo.cpp index c914832d8ce..ffdd635b5f1 100644 --- a/src/plugins/clangtools/executableinfo.cpp +++ b/src/plugins/clangtools/executableinfo.cpp @@ -214,7 +214,7 @@ QString queryVersion(const FilePath &clangToolPath, QueryFailMode failMode) return {}; } -QPair getClangIncludeDirAndVersion(const FilePath &clangToolPath) +static QPair clangIncludeDirAndVersion(const FilePath &clangToolPath) { const FilePath dynamicResourceDir = queryResourceDir(clangToolPath); const QString dynamicVersion = queryVersion(clangToolPath, QueryFailMode::Noisy); @@ -223,6 +223,15 @@ QPair getClangIncludeDirAndVersion(const FilePath &clangToolP return {dynamicResourceDir / "include", dynamicVersion}; } +QPair getClangIncludeDirAndVersion(const FilePath &clangToolPath) +{ + static QMap> cache; + auto it = cache.find(clangToolPath); + if (it == cache.end()) + it = cache.insert(clangToolPath, clangIncludeDirAndVersion(clangToolPath)); + return it.value(); +} + QHash> ClazyStandaloneInfo::cache; } // namespace Internal