diff options
| author | Olivier De Cannière <olivier.decanniere@qt.io> | 2025-04-23 14:18:40 +0200 |
|---|---|---|
| committer | Olivier De Cannière <olivier.decanniere@qt.io> | 2025-04-29 14:29:50 +0200 |
| commit | 7a6d4740ac5ca180a5893f391b8c8d856a8ef997 (patch) | |
| tree | c9b7823505be0ed6f6039ee03ff9a928dcbf9e48 | |
| parent | fb545a00ca104d3606dda37c032f1e387f49c3b9 (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.cpp | 6 |
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)) { |
