aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOlivier De Cannière <olivier.decanniere@qt.io>2025-04-23 14:18:40 +0200
committerOlivier De Cannière <olivier.decanniere@qt.io>2025-04-29 14:29:50 +0200
commit7a6d4740ac5ca180a5893f391b8c8d856a8ef997 (patch)
treec9b7823505be0ed6f6039ee03ff9a928dcbf9e48
parentfb545a00ca104d3606dda37c032f1e387f49c3b9 (diff)
Compiler: Optimize checking required properties
Checking required properties had become quite slow, especially on huge files, after daf57e29de918b7b4be7bb0d469db0c51d41bb07. Immediatelly checking for the presence of a property binding speeds things up a lot. fluentwinui3/Slider.qml, which reference a 20k line file, now compiles almost instantly again instead of talking several tens of seconds. Amends daf57e29de918b7b4be7bb0d469db0c51d41bb07 Fixes: QTBUG-135244 Pick-to: 6.8 6.5 Change-Id: I4391db27f391b179ad03dabadc910f23fa932037 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> (cherry picked from commit a6bacbbbb97849df0a185791ec0cf623b0d28717) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/qmlcompiler/qqmljsimportvisitor.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/qmlcompiler/qqmljsimportvisitor.cpp b/src/qmlcompiler/qqmljsimportvisitor.cpp
index 8daba3e175..054478dc8f 100644
--- a/src/qmlcompiler/qqmljsimportvisitor.cpp
+++ b/src/qmlcompiler/qqmljsimportvisitor.cpp
@@ -933,8 +933,8 @@ void QQmlJSImportVisitor::checkRequiredProperties()
}
}
- const auto isInComponent = [this](const QQmlJSScope::ConstPtr &requiredScope) {
- const auto compType = m_rootScopeImports.type(u"Component"_s).scope;
+ const auto compType = m_rootScopeImports.type(u"Component"_s).scope;
+ const auto isInComponent = [&](const QQmlJSScope::ConstPtr &requiredScope) {
for (auto s = requiredScope; s; s = s->parentScope()) {
if (s->isWrappedInImplicitComponent() || s->baseType() == compType)
return true;
@@ -1058,6 +1058,8 @@ void QQmlJSImportVisitor::checkRequiredProperties()
for (auto propertyIt = ownProperties.constBegin();
propertyIt != ownProperties.constEnd(); ++propertyIt) {
const QString propName = propertyIt.key();
+ if (descendant->hasOwnPropertyBindings(propName))
+ continue;
QQmlJSScope::ConstPtr prevRequiredScope;
for (QQmlJSScope::ConstPtr requiredScope : std::as_const(scopesToSearch)) {