diff options
author | Olivier Goffart <olivier.goffart@nokia.com> | 2010-07-26 13:03:44 +0200 |
---|---|---|
committer | Olivier Goffart <olivier.goffart@nokia.com> | 2010-07-26 13:09:56 +0200 |
commit | 0ba5dc8d5858040005b46e2816dfb9811fef84af (patch) | |
tree | a6c3e3dcad134079ddee25a9bda23d47ea04ab2e /src/libs/qmljs/qmljsdelta.cpp | |
parent | 001e759b2a832ffe1045d160211e89b9fd4a8fa0 (diff) | |
download | qt-creator-0ba5dc8d5858040005b46e2816dfb9811fef84af.tar.gz |
QmlJsDelta: Fix the fact that sometimes, when inserting items, the new item could match the next item
Diffstat (limited to 'src/libs/qmljs/qmljsdelta.cpp')
-rw-r--r-- | src/libs/qmljs/qmljsdelta.cpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/libs/qmljs/qmljsdelta.cpp b/src/libs/qmljs/qmljsdelta.cpp index f7b115aa48..57d0db09a1 100644 --- a/src/libs/qmljs/qmljsdelta.cpp +++ b/src/libs/qmljs/qmljsdelta.cpp @@ -185,12 +185,20 @@ Map MatchFragment(UiObjectMember *x, UiObjectMember *y, const Map &M, Document:: QList<UiObjectMember *> list2 = children(y); for (int i = 0; i < list1.count(); i++) { QString l = label(list1[i], doc1); + int foundJ = -1; + Map M3; for (int j = 0; j < list2.count(); j++) { if (l != label(list2[j], doc2)) continue; - M2 += MatchFragment(list1[i], list2[j], M, doc1, doc2); - list2.removeAt(j); - break; + Map M4 = MatchFragment(list1[i], list2[j], M, doc1, doc2); + if (M4.count() > M3.count()) { + M3 = M4; + foundJ = j; + } + } + if (foundJ != -1) { + list2.removeAt(foundJ); + M2 += M3; } } return M2; |