diff options
Diffstat (limited to 'src/plugins/autotest/itestparser.cpp')
-rw-r--r-- | src/plugins/autotest/itestparser.cpp | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/plugins/autotest/itestparser.cpp b/src/plugins/autotest/itestparser.cpp index 740f029e4c..cd0f2591dd 100644 --- a/src/plugins/autotest/itestparser.cpp +++ b/src/plugins/autotest/itestparser.cpp @@ -28,6 +28,10 @@ #include <coreplugin/editormanager/editormanager.h> #include <cpptools/cppmodelmanager.h> #include <utils/textfileformat.h> +#include <utils/algorithm.h> + +#include <QRegularExpression> +#include <QRegularExpressionMatch> namespace Autotest { @@ -69,6 +73,39 @@ QByteArray CppParser::getFileContent(const Utils::FilePath &filePath) const return fileContent; } +bool precompiledHeaderContains(const CPlusPlus::Snapshot &snapshot, + const Utils::FilePath &filePath, + const std::function<bool(const QString &)> &checker) +{ + const CppTools::CppModelManager *modelManager = CppTools::CppModelManager::instance(); + const QList<CppTools::ProjectPart::Ptr> projectParts = modelManager->projectPart(filePath); + if (projectParts.isEmpty()) + return false; + const QStringList precompiledHeaders = projectParts.first()->precompiledHeaders; + auto headerContains = [&](const QString &header){ + return Utils::anyOf(snapshot.allIncludesForDocument(header), checker); + }; + return Utils::anyOf(precompiledHeaders, headerContains); +} + +bool CppParser::precompiledHeaderContains(const CPlusPlus::Snapshot &snapshot, + const Utils::FilePath &filePath, + const QString &headerFilePath) +{ + return Autotest::precompiledHeaderContains(snapshot, filePath, [&](const QString &include) { + return include.endsWith(headerFilePath); + }); +} + +bool CppParser::precompiledHeaderContains(const CPlusPlus::Snapshot &snapshot, + const Utils::FilePath &filePath, + const QRegularExpression &headerFileRegex) +{ + return Autotest::precompiledHeaderContains(snapshot, filePath, [&](const QString &include) { + return headerFileRegex.match(include).hasMatch(); + }); +} + void CppParser::release() { m_cppSnapshot = CPlusPlus::Snapshot(); |