diff options
author | Christian Stenger <christian.stenger@qt.io> | 2023-01-19 22:11:36 +0100 |
---|---|---|
committer | Christian Stenger <christian.stenger@qt.io> | 2023-01-23 12:12:02 +0000 |
commit | a7f0c8e81b7e73686034cfc2f337a5e2bb9e9f2e (patch) | |
tree | 3fc8c3833888c6504a3f44517ff3994e1a8003d1 /src/plugins/autotest/testcodeparser.cpp | |
parent | 3873bcf2a494d74de108c14df110f6b356a422cb (diff) | |
download | qt-creator-a7f0c8e81b7e73686034cfc2f337a5e2bb9e9f2e.tar.gz |
AutoTest: Reduce parsing attempts
Do not check for code model parsing only, but take project
parsing as well into account.
Explicitly ignore more qml code model related files supposed
to hold no functional code.
Change-Id: I2dc8a6331ea508cbb287ea5000f5abe302069060
Reviewed-by: David Schulz <david.schulz@qt.io>
Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io>
Diffstat (limited to 'src/plugins/autotest/testcodeparser.cpp')
-rw-r--r-- | src/plugins/autotest/testcodeparser.cpp | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/plugins/autotest/testcodeparser.cpp b/src/plugins/autotest/testcodeparser.cpp index b28eca38f4..c5dbcd6d51 100644 --- a/src/plugins/autotest/testcodeparser.cpp +++ b/src/plugins/autotest/testcodeparser.cpp @@ -12,6 +12,7 @@ #include <coreplugin/progressmanager/progressmanager.h> #include <cppeditor/cppeditorconstants.h> #include <cppeditor/cppmodelmanager.h> +#include <projectexplorer/buildsystem.h> #include <projectexplorer/project.h> #include <projectexplorer/session.h> #include <qmljstools/qmljsmodelmanager.h> @@ -32,6 +33,12 @@ Q_LOGGING_CATEGORY(LOG, "qtc.autotest.testcodeparser", QtWarningMsg) using namespace ProjectExplorer; +static bool isProjectParsing() +{ + const BuildSystem *bs = SessionManager::startupBuildSystem(); + return bs && bs->isParsing(); +} + TestCodeParser::TestCodeParser() : m_threadPool(new QThreadPool(this)) { @@ -61,7 +68,7 @@ void TestCodeParser::setState(State state) return; qCDebug(LOG) << "setState(" << state << "), currentState:" << m_parserState; // avoid triggering parse before code model parsing has finished, but mark as dirty - if (m_codeModelParsing) { + if (isProjectParsing() || m_codeModelParsing) { m_dirty = true; qCDebug(LOG) << "Not setting new state - code model parsing is running, just marking dirty"; return; @@ -118,7 +125,7 @@ void TestCodeParser::emitUpdateTestTree(ITestParser *parser) void TestCodeParser::updateTestTree(const QSet<ITestParser *> &parsers) { m_singleShotScheduled = false; - if (m_codeModelParsing) { + if (isProjectParsing() || m_codeModelParsing) { m_postponedUpdateType = UpdateType::FullUpdate; m_postponedFiles.clear(); if (parsers.isEmpty()) { @@ -146,7 +153,7 @@ void TestCodeParser::updateTestTree(const QSet<ITestParser *> &parsers) void TestCodeParser::onDocumentUpdated(const Utils::FilePath &fileName, bool isQmlFile) { - if (m_codeModelParsing || m_postponedUpdateType == UpdateType::FullUpdate) + if (isProjectParsing() || m_codeModelParsing || m_postponedUpdateType == UpdateType::FullUpdate) return; Project *project = SessionManager::startupProject(); @@ -166,8 +173,9 @@ void TestCodeParser::onCppDocumentUpdated(const CPlusPlus::Document::Ptr &docume void TestCodeParser::onQmlDocumentUpdated(const QmlJS::Document::Ptr &document) { + static const QStringList ignoredSuffixes{ "qbs", "ui.qml" }; const Utils::FilePath fileName = document->fileName(); - if (!fileName.endsWith(".qbs")) + if (!ignoredSuffixes.contains(fileName.suffix())) onDocumentUpdated(fileName, true); } @@ -186,7 +194,7 @@ void TestCodeParser::onProjectPartsUpdated(Project *project) { if (project != SessionManager::startupProject()) return; - if (m_codeModelParsing) + if (isProjectParsing() || m_codeModelParsing) m_postponedUpdateType = UpdateType::FullUpdate; else emitUpdateTestTree(); |