diff options
author | Fawzi Mohamed <fawzi.mohamed@digia.com> | 2014-07-14 18:39:18 +0200 |
---|---|---|
committer | Fawzi Mohamed <fawzi.mohamed@digia.com> | 2014-07-15 17:05:27 +0200 |
commit | cd92b70f657620766266eb4b463f9d8fe7e8aae6 (patch) | |
tree | f4b99324f2563aa61643411cbda1fe2196708ba3 /src/libs/qmljs/qmljsmodelmanagerinterface.cpp | |
parent | 1541fbd2ba8e9d3c12ebdea74453e7e597d961d5 (diff) | |
download | qt-creator-cd92b70f657620766266eb4b463f9d8fe7e8aae6.tar.gz |
qmljs: avoid reset if C++ types did not really change
Change-Id: I00b59a6b140eb33e2f3206f11e6ab0f9b470dff0
Reviewed-by: Marco Bubke <marco.bubke@digia.com>
Diffstat (limited to 'src/libs/qmljs/qmljsmodelmanagerinterface.cpp')
-rw-r--r-- | src/libs/qmljs/qmljsmodelmanagerinterface.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/libs/qmljs/qmljsmodelmanagerinterface.cpp b/src/libs/qmljs/qmljsmodelmanagerinterface.cpp index 6a65e9a6fa..543e0c6955 100644 --- a/src/libs/qmljs/qmljsmodelmanagerinterface.cpp +++ b/src/libs/qmljs/qmljsmodelmanagerinterface.cpp @@ -1250,8 +1250,20 @@ void ModelManagerInterface::updateCppQmlTypes(QFutureInterface<void> &interface, hasNewInfo = hasNewInfo || newData.remove(fileName) > 0; } else { CppData &data = newData[fileName]; - // currently we have no simple way to compare, so we assume the worse - hasNewInfo = true; + if (!hasNewInfo && (data.exportedTypes.size() != exported.size() + || data.contextProperties != contextProperties)) + hasNewInfo = true; + if (!hasNewInfo) { + QHash<QString, QByteArray> newFingerprints; + foreach (LanguageUtils::FakeMetaObject::ConstPtr newType, exported) + newFingerprints[newType->className()]=newType->fingerprint(); + foreach (LanguageUtils::FakeMetaObject::ConstPtr oldType, data.exportedTypes) { + if (newFingerprints.value(oldType->className()) != oldType->fingerprint()) { + hasNewInfo = true; + break; + } + } + } data.exportedTypes = exported; data.contextProperties = contextProperties; } |