summaryrefslogtreecommitdiff
path: root/src/libs/qmljs/qmljsmodelmanagerinterface.cpp
diff options
context:
space:
mode:
authorFawzi Mohamed <fawzi.mohamed@digia.com>2014-07-14 18:39:18 +0200
committerFawzi Mohamed <fawzi.mohamed@digia.com>2014-07-15 17:05:27 +0200
commitcd92b70f657620766266eb4b463f9d8fe7e8aae6 (patch)
treef4b99324f2563aa61643411cbda1fe2196708ba3 /src/libs/qmljs/qmljsmodelmanagerinterface.cpp
parent1541fbd2ba8e9d3c12ebdea74453e7e597d961d5 (diff)
downloadqt-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.cpp16
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;
}